diff --git a/.github/workflows/ci_cortex_m.yml b/.github/workflows/ci_cortex_m.yml
index 57e1149bb..149490be5 100644
--- a/.github/workflows/ci_cortex_m.yml
+++ b/.github/workflows/ci_cortex_m.yml
@@ -47,7 +47,7 @@ jobs:
path: $HOME/arm-none-eabi-gcc-9-2019-q4
key: ${{ runner.os }}-arm-gcc-9-2019-q4
- # Get the arm-non-eabi-gcc toolchain
+ # Get the arm-non-eabi-gcc toolchain
- name: Install arm-none-eabi-gcc
uses: fiam/arm-none-eabi-gcc@v1
if: steps.cache-arm-gcc.outputs.cache-hit != 'true'
diff --git a/.github/workflows/regression_template.yml b/.github/workflows/regression_template.yml
index f2b529f6e..205eb5a8c 100644
--- a/.github/workflows/regression_template.yml
+++ b/.github/workflows/regression_template.yml
@@ -56,7 +56,7 @@ jobs:
issues: read
checks: write
pull-requests: write
-
+
# The type of runner that the job will run on
runs-on: ubuntu-latest
@@ -66,7 +66,7 @@ jobs:
uses: actions/checkout@v4.2.2
with:
submodules: true
-
+
- name: Install softwares
run: ${{ inputs.install_script }}
@@ -75,7 +75,7 @@ jobs:
- name: Test
run: ${{ inputs.test_script }}
-
+
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2.11.0
if: always()
@@ -83,7 +83,7 @@ jobs:
check_name: Test Results ${{ inputs.result_affix }}
files: |
${{ inputs.cmake_path }}/build/*/*.xml
-
+
- name: Upload Test Results
if: success() || failure()
uses: actions/upload-artifact@v4.6.2
@@ -93,7 +93,7 @@ jobs:
${{ inputs.cmake_path }}/build/*.txt
${{ inputs.cmake_path }}/build/*/Testing/**/*.xml
${{ inputs.cmake_path }}/build/**/regression/output_files/*.bin
-
+
- name: Configure GitHub Pages
uses: actions/configure-pages@v5.0.0
@@ -158,7 +158,7 @@ jobs:
if: (!inputs.skip_deploy && !inputs.skip_coverage)
with:
path: ${{ inputs.cmake_path }}/coverage_report/${{ inputs.coverage_name }}
-
+
deploy_code_coverage:
runs-on: ubuntu-latest
if: ((github.event_name == 'push') || (github.event_name == 'workflow_dispatch')) && !inputs.skip_coverage && !inputs.skip_deploy && !failure() && !cancelled()
@@ -183,7 +183,7 @@ jobs:
with:
path: .
- - name: Delete Duplicate Code Coverage Artifact
+ - name: Delete Duplicate Code Coverage Artifact
uses: geekyeggo/delete-artifact@v5.1.0
with:
name: coverage_report
@@ -195,7 +195,7 @@ jobs:
- name: Write Code Coverage Report URL
run: >-
if [ "${{ inputs.deploy_list }}" != "" ]; then
- for i in ${{ inputs.deploy_list }}; do
+ for i in ${{ inputs.deploy_list }}; do
echo 'Coverage report for ' $i ':${{ steps.deployment.outputs.page_url }}'$i >> $GITHUB_STEP_SUMMARY
done
else
diff --git a/.gitignore b/.gitignore
index 16aa71adb..d2216ddb4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.vscode/
.settings/
.metadata/
+.tmp/
_deps/
build/
Debug/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d63cb0dc..f3c5e5d26 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -200,7 +200,7 @@
| 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 |
+| 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 |
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 42c328fdf..9d348e684 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,10 +49,10 @@ if (NOT TX_USER_FILE)
set(TX_USER_FILE ${CMAKE_CURRENT_LIST_DIR}/common/inc/tx_user_sample.h)
else()
message(STATUS "Using custom tx_user.h file from ${TX_USER_FILE}")
-endif()
+endif()
configure_file(${TX_USER_FILE} ${CUSTOM_INC_DIR}/tx_user.h COPYONLY)
-target_include_directories(${PROJECT_NAME}
- PUBLIC
+target_include_directories(${PROJECT_NAME}
+ PUBLIC
${CUSTOM_INC_DIR}
)
target_compile_definitions(${PROJECT_NAME} PUBLIC "TX_INCLUDE_USER_DEFINE_FILE" )
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a327a0bc9..7dfafcacc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ Thanks for your interest in this project.
Eclipse ThreadX provides a vendor-neutral, open source, safety certified OS for
real-time applications published on under a permissive license. The Eclipse
-ThreadX suite encompasses:
+ThreadX suite encompasses:
* ThreadX - advanced real-time operating system (RTOS) designed specifically for deeply embedded applications
* NetX Duo - advanced, industrial-grade TCP/IP network stack designed specifically for deeply embedded real-time and IoT applications
* FileX - high-performance, FAT-compatible file system that’s fully integrated with ThreadX kernel
@@ -20,7 +20,7 @@ Project site: https://projects.eclipse.org/projects/iot.threadx
## Terms of Use
-This repository is subject to the Terms of Use of the Eclipse Foundation
+This repository is subject to the Terms of Use of the Eclipse Foundation
https://www.eclipse.org/legal/termsofuse.php
## Developer resources
@@ -54,7 +54,7 @@ Development Process and operates under the terms of the Eclipse IP Policy.
## Eclipse Contributor Agreement
-In order to be able to contribute to Eclipse Foundation projects you must electronically sign the Eclipse Contributor Agreement (ECA).
+In order to be able to contribute to Eclipse Foundation projects you must electronically sign the Eclipse Contributor Agreement (ECA).
https://www.eclipse.org/legal/ECA.php
The ECA provides the Eclipse Foundation with a permanent record that you agree
@@ -63,10 +63,10 @@ the Developer Certificate of Origin (DCO). Having an ECA on file associated with
the email address matching the "Author" field of your contribution's Git commits
fulfills the DCO's requirement that you sign-off on your contributions.
-For more information, please see the Eclipse Committer Handbook:
+For more information, please see the Eclipse Committer Handbook:
https://www.eclipse.org/projects/handbook/#resources-commit
## Contact
-Contact the project developers via the project's "dev" list.
+Contact the project developers via the project's "dev" list.
https://accounts.eclipse.org/mailing-list/threadx-dev
diff --git a/README.md b/README.md
index b3c3e456e..260a77a30 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Eclipse ThreadX has been integrated to the semiconductor's SDKs and development
We also provide [getting started guide](https://github.com/eclipse-threadx/getting-started) and [samples](https://github.com/eclipse-threadx/samples) using development boards from semiconductors you can build and test with.
-See [Overview of Eclipse ThreadX RTOS](https://github.com/eclipse-threadx/rtos-docs/blob/main/rtos-docs/threadx/overview-threadx.md) for the high-level overview.
+See [Overview of Eclipse ThreadX RTOS](https://github.com/eclipse-threadx/rtos-docs/blob/main/rtos-docs/threadx/overview-threadx.md) for the high-level overview.
## Repository Structure and Usage
### Directory layout
@@ -23,8 +23,8 @@ See [Overview of Eclipse ThreadX RTOS](https://github.com/eclipse-threadx/rtos-d
├── common_modules # Core ThreadX module files
├── common_smp # Core ThreadX SMP files
├── docs # Documentation supplements
- ├── ports # Architecture and compiler specific files. See below for directory breakdown
- │ ├── cortex_m7
+ ├── ports # Architecture and compiler specific files. See below for directory breakdown
+ │ ├── cortex_m7
│ │ ├── iar # Example IAR compiler sample project
│ │ │ ├── example build # IAR workspace and sample project files
│ │ │ ├── inc # tx_port.h for this architecture
@@ -32,7 +32,7 @@ See [Overview of Eclipse ThreadX RTOS](https://github.com/eclipse-threadx/rtos-d
│ │ ├── ac6 # Example ac6/Keil sample project
│ │ ├── gnu # Example gnu sample project
│ │ └── ...
- │ └── ...
+ │ └── ...
├── ports_modules # Architecture and compiler specific files for threadX modules
├── ports_smp # Architecture and compiler specific files for threadX SMP
├── samples # demo_threadx.c
@@ -87,7 +87,7 @@ The master branch has the most recent code with all new features and bug fixes.
/* xx-xx-xxxx Scott Larson Include tx_user.h, */
/* resulting in version 6.x */
/* */
-/**************************************************************************/
+/**************************************************************************/
```
## Supported Architecture Ports
@@ -97,8 +97,8 @@ The master branch has the most recent code with all new features and bug fixes.
arc_em cortex_a12 cortex_m0 cortex_r4
arc_hs cortex_a15 cortex_m23 cortex_r5
arm11 cortex_a17 cortex_m3 cortex_r7
-arm9 cortex_a34 cortex_m33
-c667x cortex_a35 cortex_m4
+arm9 cortex_a34 cortex_m33
+c667x cortex_a35 cortex_m4
linux cortex_a5 cortex_m55
risc-v32 cortex_a53 cortex_m7
rxv1 cortex_a55 cortex_m85
diff --git a/cmake/riscv32-clang-unknown-elf.cmake b/cmake/riscv32-clang-unknown-elf.cmake
new file mode 100644
index 000000000..eb520962b
--- /dev/null
+++ b/cmake/riscv32-clang-unknown-elf.cmake
@@ -0,0 +1,29 @@
+# Toolchain settings
+set(CMAKE_C_COMPILER clang-18)
+set(CMAKE_CXX_COMPILER clang++-18)
+#set(AS llvm-as)
+#set(AR llvm-ar)
+#set(OBJCOPY llvm-objcopy)
+#set(OBJDUMP llvm-objdump-18)
+#set(SIZE llvm-size)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+# this makes the test compiles use static library option so that we don't need to pre-set linker flags and scripts
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+set(CMAKE_C_FLAGS "${CFLAGS}" CACHE INTERNAL "c compiler flags")
+set(CMAKE_CXX_FLAGS "${CXXFLAGS}" CACHE INTERNAL "cxx compiler flags")
+set(CMAKE_ASM_FLAGS "${ASFLAGS} -D__ASSEMBLER__" CACHE INTERNAL "asm compiler flags")
+set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS}" CACHE INTERNAL "exe link flags")
+
+SET(CMAKE_C_FLAGS_DEBUG "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32 -g" CACHE INTERNAL "c debug compiler flags")
+SET(CMAKE_CXX_FLAGS_DEBUG "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32 -g" CACHE INTERNAL "cxx debug compiler flags")
+SET(CMAKE_ASM_FLAGS_DEBUG "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32 -g" CACHE INTERNAL "asm debug compiler flags")
+
+SET(CMAKE_C_FLAGS_RELEASE "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32 -O3" CACHE INTERNAL "c release compiler flags")
+SET(CMAKE_CXX_FLAGS_RELEASE "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32 -O3" CACHE INTERNAL "cxx release compiler flags")
+SET(CMAKE_ASM_FLAGS_RELEASE "--target=riscv32 -march=rv32im_zicsr_zicntr -mabi=ilp32" CACHE INTERNAL "asm release compiler flags")
diff --git a/cmake/riscv32-unknown-elf.cmake b/cmake/riscv32-unknown-elf.cmake
new file mode 100644
index 000000000..cfd9f7eae
--- /dev/null
+++ b/cmake/riscv32-unknown-elf.cmake
@@ -0,0 +1,29 @@
+# Toolchain settings
+set(CMAKE_C_COMPILER riscv32-unknown-elf-gcc)
+set(CMAKE_CXX_COMPILER riscv32-unknown-elf-g++)
+set(AS riscv32-unknown-elf-as)
+set(AR riscv32-unknown-elf-ar)
+set(OBJCOPY riscv32-unknown-elf-objcopy)
+set(OBJDUMP riscv32-unknown-elf-objdump)
+set(SIZE riscv32-unknown-elf-size)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+# this makes the test compiles use static library option so that we don't need to pre-set linker flags and scripts
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+set(CMAKE_C_FLAGS "${CFLAGS}" CACHE INTERNAL "c compiler flags")
+set(CMAKE_CXX_FLAGS "${CXXFLAGS}" CACHE INTERNAL "cxx compiler flags")
+set(CMAKE_ASM_FLAGS "${ASFLAGS} -D__ASSEMBLER__ -D__riscv_float_abi_single" CACHE INTERNAL "asm compiler flags")
+set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS}" CACHE INTERNAL "exe link flags")
+
+SET(CMAKE_C_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "c debug compiler flags")
+SET(CMAKE_CXX_FLAGS_DEBUG "-Og -g -ggdb3" CACHE INTERNAL "cxx debug compiler flags")
+SET(CMAKE_ASM_FLAGS_DEBUG "-g -ggdb3" CACHE INTERNAL "asm debug compiler flags")
+
+SET(CMAKE_C_FLAGS_RELEASE "-O3" CACHE INTERNAL "c release compiler flags")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O3" CACHE INTERNAL "cxx release compiler flags")
+SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm release compiler flags")
diff --git a/cmake/riscv32_clang.cmake b/cmake/riscv32_clang.cmake
new file mode 100644
index 000000000..97acd8327
--- /dev/null
+++ b/cmake/riscv32_clang.cmake
@@ -0,0 +1,18 @@
+# Name of the target
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_PROCESSOR risc-v32)
+
+IF(DEFINED $ENV{GCC_INSTALL_PREFIX})
+ SET(GCC_INSTALL_PREFIX "$ENV{GCC_INSTALL_PREFIX}" CACHE INTERNAL "" FORCE)
+ELSE()
+ SET(GCC_INSTALL_PREFIX "/opt/riscv_rv32ima" CACHE INTERNAL "" FORCE)
+ENDIF()
+
+set(THREADX_ARCH "risc-v32")
+set(THREADX_TOOLCHAIN "clang")
+set(ARCH_FLAGS "--sysroot=${GCC_INSTALL_PREFIX}/riscv32-unknown-elf --target=riscv32 -g -march=rv32ima_zicsr -mabi=ilp32")
+set(CFLAGS "${ARCH_FLAGS}")
+set(ASFLAGS "${ARCH_FLAGS}")
+set(LDFLAGS "--no-dynamic-linker -m elf32lriscv -static -nostdlib")
+
+include(${CMAKE_CURRENT_LIST_DIR}/riscv32-clang-unknown-elf.cmake)
diff --git a/cmake/riscv32_gnu.cmake b/cmake/riscv32_gnu.cmake
new file mode 100644
index 000000000..617b12760
--- /dev/null
+++ b/cmake/riscv32_gnu.cmake
@@ -0,0 +1,12 @@
+# Name of the target
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_PROCESSOR risc-v32)
+
+set(THREADX_ARCH "risc-v32")
+set(THREADX_TOOLCHAIN "gnu")
+set(ARCH_FLAGS "-g -march=rv32gc -mabi=ilp32d -mcmodel=medany")
+set(CFLAGS "${ARCH_FLAGS}")
+set(ASFLAGS "${ARCH_FLAGS}")
+set(LDFLAGS "${ARCH_FLAGS}")
+
+include(${CMAKE_CURRENT_LIST_DIR}/riscv32-unknown-elf.cmake)
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 715e64c75..51314c957 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -201,9 +201,9 @@ target_sources(${PROJECT_NAME}
)
# Add the Common/inc directory to the project include list
-target_include_directories(${PROJECT_NAME}
+target_include_directories(${PROJECT_NAME}
SYSTEM
- PUBLIC
+ PUBLIC
${CMAKE_CURRENT_LIST_DIR}/inc
)
diff --git a/common/inc/tx_api.h b/common/inc/tx_api.h
index 4224c7e69..7527c4132 100644
--- a/common/inc/tx_api.h
+++ b/common/inc/tx_api.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -38,78 +39,6 @@
/* Please note that basic data type definitions and other architecture-*/
/* specific information is contained in the file tx_port.h. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified comment(s), and */
-/* updated product constants, */
-/* added new thread execution */
-/* state TX_PRIORITY_CHANGE, */
-/* added macros for casting */
-/* pointers to ALIGN_TYPE, */
-/* resulting in version 6.1 */
-/* 10-16-2020 William E. Lamie Modified comment(s), and */
-/* increased patch version, */
-/* resulting in version 6.1.1 */
-/* 11-09-2020 Yuxin Zhou Modified comment(s), and */
-/* moved TX_THREAD_GET_SYSTEM_ */
-/* STATE to tx_api.h, */
-/* resulting in version 6.1.2 */
-/* 12-31-2020 William E. Lamie Modified comment(s), and */
-/* increased patch version, */
-/* resulting in version 6.1.3 */
-/* 03-02-2021 Scott Larson Modified comment(s), and */
-/* order defines numerically, */
-/* add option to remove FileX */
-/* pointer, */
-/* resulting in version 6.1.5 */
-/* 04-02-2021 Scott Larson Modified comment(s), and */
-/* update patch number, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), added */
-/* Execution Profile support, */
-/* resulting in version 6.1.7 */
-/* 08-02-2021 Scott Larson Modified comment(s), and */
-/* update patch number, */
-/* resulting in version 6.1.8 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), */
-/* add unused parameter macro, */
-/* update patch number, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Wenhui Xie Modified comment(s), */
-/* optimized the definition of */
-/* TX_TIMER_TICKS_PER_SECOND, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.1.12 */
-/* 10-31-2022 Scott Larson Modified comment(s), */
-/* add extension macros, */
-/* update EPK typedef, */
-/* update version numbers, */
-/* resulting in version 6.2.0 */
-/* 03-08-2023 Tiejun Zhou Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.2.1 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Tiejun Zhou Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.0 */
-/* 03-01-2024 Tiejun Zhou Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.1 */
-/* 02-19-2025 Frédéric Desbiens Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.2 */
-/* */
/**************************************************************************/
#ifndef TX_API_H
@@ -147,9 +76,9 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
-#define THREADX_MINOR_VERSION 4
-#define THREADX_PATCH_VERSION 5
-#define THREADX_BUILD_VERSION 202504
+#define THREADX_MINOR_VERSION 5
+#define THREADX_PATCH_VERSION 0
+#define THREADX_BUILD_VERSION 202601
#define THREADX_HOTFIX_VERSION ' '
/* Define the following symbol for backward compatibility */
diff --git a/common/inc/tx_block_pool.h b/common/inc/tx_block_pool.h
index 2a8bb51e7..89c9dfbe4 100644
--- a/common/inc/tx_block_pool.h
+++ b/common/inc/tx_block_pool.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_BLOCK_POOL_H
diff --git a/common/inc/tx_byte_pool.h b/common/inc/tx_byte_pool.h
index 8f1050fa8..b9f343118 100644
--- a/common/inc/tx_byte_pool.h
+++ b/common/inc/tx_byte_pool.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_BYTE_POOL_H
diff --git a/common/inc/tx_event_flags.h b/common/inc/tx_event_flags.h
index 51e99536a..6506dd130 100644
--- a/common/inc/tx_event_flags.h
+++ b/common/inc/tx_event_flags.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EVENT_FLAGS_H
diff --git a/common/inc/tx_initialize.h b/common/inc/tx_initialize.h
index 28c7251bf..fd9449653 100644
--- a/common/inc/tx_initialize.h
+++ b/common/inc/tx_initialize.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_INITIALIZE_H
diff --git a/common/inc/tx_mutex.h b/common/inc/tx_mutex.h
index a3b52386a..b0b46c2f9 100644
--- a/common/inc/tx_mutex.h
+++ b/common/inc/tx_mutex.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_MUTEX_H
diff --git a/common/inc/tx_queue.h b/common/inc/tx_queue.h
index 7074a91ef..c8b4122c5 100644
--- a/common/inc/tx_queue.h
+++ b/common/inc/tx_queue.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_QUEUE_H
diff --git a/common/inc/tx_semaphore.h b/common/inc/tx_semaphore.h
index 6784e58f2..baf292bd6 100644
--- a/common/inc/tx_semaphore.h
+++ b/common/inc/tx_semaphore.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SEMAPHORE_H
diff --git a/common/inc/tx_thread.h b/common/inc/tx_thread.h
index 8729263d9..5ba8b3f54 100644
--- a/common/inc/tx_thread.h
+++ b/common/inc/tx_thread.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,21 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 11-09-2020 Yuxin Zhou Modified comment(s), and */
-/* moved TX_THREAD_GET_SYSTEM_ */
-/* STATE to tx_api.h, */
-/* resulting in version 6.1.2 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* */
/**************************************************************************/
#ifndef TX_THREAD_H
diff --git a/common/inc/tx_timer.h b/common/inc/tx_timer.h
index 4703b14d7..b49c573e6 100644
--- a/common/inc/tx_timer.h
+++ b/common/inc/tx_timer.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_TIMER_H
diff --git a/common/inc/tx_trace.h b/common/inc/tx_trace.h
index dd78580ee..d85d5cc35 100644
--- a/common/inc/tx_trace.h
+++ b/common/inc/tx_trace.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -35,14 +36,6 @@
/* and structure definitions as well as external references. It is */
/* assumed that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
diff --git a/common/inc/tx_user_sample.h b/common/inc/tx_user_sample.h
index f8d809b53..9621c30cd 100644
--- a/common/inc/tx_user_sample.h
+++ b/common/inc/tx_user_sample.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,33 +40,6 @@
/* Note that all the defines in this file may also be made on the */
/* command line when building ThreadX library and application objects. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), */
-/* added option to remove */
-/* FileX pointer, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Added options for multiple */
-/* block pool search & delay, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), added */
-/* user-configurable symbol */
-/* TX_TIMER_TICKS_PER_SECOND */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Wenhui Xie Modified comment(s), */
-/* optimized the definition of */
-/* TX_TIMER_TICKS_PER_SECOND, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
#ifndef TX_USER_H
@@ -182,7 +156,7 @@
/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
pattern for stack filling. When the following is defined, ThreadX uses a random number
- for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
+ for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
/*
#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
diff --git a/common/src/tx_block_allocate.c b/common/src/tx_block_allocate.c
index b2c7bef5e..78619603c 100644
--- a/common/src/tx_block_allocate.c
+++ b/common/src/tx_block_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_allocate(TX_BLOCK_POOL *pool_ptr, VOID **block_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_block_pool_cleanup.c b/common/src/tx_block_pool_cleanup.c
index 9bae546de..7bcfecd8a 100644
--- a/common/src/tx_block_pool_cleanup.c
+++ b/common/src/tx_block_pool_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_block_pool_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_block_pool_create.c b/common/src/tx_block_pool_create.c
index 546120198..1d2c803cf 100644
--- a/common/src/tx_block_pool_create.c
+++ b/common/src/tx_block_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_create(TX_BLOCK_POOL *pool_ptr, CHAR *name_ptr, ULONG block_size,
VOID *pool_start, ULONG pool_size)
diff --git a/common/src/tx_block_pool_delete.c b/common/src/tx_block_pool_delete.c
index da27ef57b..19ecb0552 100644
--- a/common/src/tx_block_pool_delete.c
+++ b/common/src/tx_block_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_delete(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common/src/tx_block_pool_info_get.c b/common/src/tx_block_pool_info_get.c
index aebd0db6b..5998f1db4 100644
--- a/common/src/tx_block_pool_info_get.c
+++ b/common/src/tx_block_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_info_get(TX_BLOCK_POOL *pool_ptr, CHAR **name, ULONG *available_blocks,
ULONG *total_blocks, TX_THREAD **first_suspended,
diff --git a/common/src/tx_block_pool_initialize.c b/common/src/tx_block_pool_initialize.c
index 211321597..e01eba329 100644
--- a/common/src/tx_block_pool_initialize.c
+++ b/common/src/tx_block_pool_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -97,17 +98,6 @@ ULONG _tx_block_pool_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_block_pool_initialize(VOID)
{
diff --git a/common/src/tx_block_pool_performance_info_get.c b/common/src/tx_block_pool_performance_info_get.c
index 84f680268..aecf78510 100644
--- a/common/src/tx_block_pool_performance_info_get.c
+++ b/common/src/tx_block_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_info_get(TX_BLOCK_POOL *pool_ptr, ULONG *allocates, ULONG *releases,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common/src/tx_block_pool_performance_system_info_get.c b/common/src/tx_block_pool_performance_system_info_get.c
index 0707295d9..86627dd02 100644
--- a/common/src/tx_block_pool_performance_system_info_get.c
+++ b/common/src/tx_block_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_system_info_get(ULONG *allocates, ULONG *releases, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common/src/tx_block_pool_prioritize.c b/common/src/tx_block_pool_prioritize.c
index c4ee4e941..89c2d634d 100644
--- a/common/src/tx_block_pool_prioritize.c
+++ b/common/src/tx_block_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_prioritize(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common/src/tx_block_release.c b/common/src/tx_block_release.c
index 3b94c1bb0..4a11fe08a 100644
--- a/common/src/tx_block_release.c
+++ b/common/src/tx_block_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_release(VOID *block_ptr)
{
diff --git a/common/src/tx_byte_allocate.c b/common/src/tx_byte_allocate.c
index 69e837e3b..2e1a2e5e5 100644
--- a/common/src/tx_byte_allocate.c
+++ b/common/src/tx_byte_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_allocate(TX_BYTE_POOL *pool_ptr, VOID **memory_ptr, ULONG memory_size, ULONG wait_option)
{
diff --git a/common/src/tx_byte_pool_cleanup.c b/common/src/tx_byte_pool_cleanup.c
index a1260c5bf..3a7acd548 100644
--- a/common/src/tx_byte_pool_cleanup.c
+++ b/common/src/tx_byte_pool_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_byte_pool_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_byte_pool_create.c b/common/src/tx_byte_pool_create.c
index 439eed7c4..21abbe356 100644
--- a/common/src/tx_byte_pool_create.c
+++ b/common/src/tx_byte_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_create(TX_BYTE_POOL *pool_ptr, CHAR *name_ptr, VOID *pool_start, ULONG pool_size)
{
diff --git a/common/src/tx_byte_pool_delete.c b/common/src/tx_byte_pool_delete.c
index fc3d9be11..3a24705fc 100644
--- a/common/src/tx_byte_pool_delete.c
+++ b/common/src/tx_byte_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_delete(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common/src/tx_byte_pool_info_get.c b/common/src/tx_byte_pool_info_get.c
index 339aa7711..bd0964407 100644
--- a/common/src/tx_byte_pool_info_get.c
+++ b/common/src/tx_byte_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_info_get(TX_BYTE_POOL *pool_ptr, CHAR **name, ULONG *available_bytes,
ULONG *fragments, TX_THREAD **first_suspended,
diff --git a/common/src/tx_byte_pool_initialize.c b/common/src/tx_byte_pool_initialize.c
index 65514536c..652ec8290 100644
--- a/common/src/tx_byte_pool_initialize.c
+++ b/common/src/tx_byte_pool_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -112,17 +113,6 @@ ULONG _tx_byte_pool_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_byte_pool_initialize(VOID)
{
diff --git a/common/src/tx_byte_pool_performance_info_get.c b/common/src/tx_byte_pool_performance_info_get.c
index 400804a2d..6c2fd6151 100644
--- a/common/src/tx_byte_pool_performance_info_get.c
+++ b/common/src/tx_byte_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,14 +79,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_info_get(TX_BYTE_POOL *pool_ptr, ULONG *allocates, ULONG *releases,
ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
diff --git a/common/src/tx_byte_pool_performance_system_info_get.c b/common/src/tx_byte_pool_performance_system_info_get.c
index 266e27679..23f41c474 100644
--- a/common/src/tx_byte_pool_performance_system_info_get.c
+++ b/common/src/tx_byte_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -75,14 +76,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_system_info_get(ULONG *allocates, ULONG *releases,
ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
diff --git a/common/src/tx_byte_pool_prioritize.c b/common/src/tx_byte_pool_prioritize.c
index 0076e503a..dc2ecc038 100644
--- a/common/src/tx_byte_pool_prioritize.c
+++ b/common/src/tx_byte_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_prioritize(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common/src/tx_byte_pool_search.c b/common/src/tx_byte_pool_search.c
index 504ad745b..408f65878 100644
--- a/common/src/tx_byte_pool_search.c
+++ b/common/src/tx_byte_pool_search.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,17 +72,6 @@
/* _tx_byte_allocate Allocate bytes of memory */
/* _tx_byte_release Release bytes of memory */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 06-02-2021 Scott Larson Improve possible free bytes */
-/* calculation, */
-/* resulting in version 6.1.7 */
-/* */
/**************************************************************************/
UCHAR *_tx_byte_pool_search(TX_BYTE_POOL *pool_ptr, ULONG memory_size)
{
diff --git a/common/src/tx_byte_release.c b/common/src/tx_byte_release.c
index 387320bab..b56665edb 100644
--- a/common/src/tx_byte_release.c
+++ b/common/src/tx_byte_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_release(VOID *memory_ptr)
{
diff --git a/common/src/tx_event_flags_cleanup.c b/common/src/tx_event_flags_cleanup.c
index 3f8705643..ac7bc68b0 100644
--- a/common/src/tx_event_flags_cleanup.c
+++ b/common/src/tx_event_flags_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_event_flags_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_event_flags_create.c b/common/src/tx_event_flags_create.c
index 2195527ae..2a9c042d6 100644
--- a/common/src/tx_event_flags_create.c
+++ b/common/src/tx_event_flags_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr)
{
diff --git a/common/src/tx_event_flags_delete.c b/common/src/tx_event_flags_delete.c
index 2b7c890ab..777f2491d 100644
--- a/common/src/tx_event_flags_delete.c
+++ b/common/src/tx_event_flags_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_delete(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common/src/tx_event_flags_get.c b/common/src/tx_event_flags_get.c
index 4e9abb804..3136d1595 100644
--- a/common/src/tx_event_flags_get.c
+++ b/common/src/tx_event_flags_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-25-2022 Scott Larson Modified comment(s), */
-/* handle 0 flags case, */
-/* resulting in version 6.1.11 */
-/* 10-31-2022 Scott Larson Modified comment(s), always */
-/* return actual flags, */
-/* resulting in version 6.2.0 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG requested_flags,
UINT get_option, ULONG *actual_flags_ptr, ULONG wait_option)
diff --git a/common/src/tx_event_flags_info_get.c b/common/src/tx_event_flags_info_get.c
index 9d409bc59..21e85c9a1 100644
--- a/common/src/tx_event_flags_info_get.c
+++ b/common/src/tx_event_flags_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR **name, ULONG *current_flags,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/tx_event_flags_initialize.c b/common/src/tx_event_flags_initialize.c
index f7b107c88..d5cd72b9f 100644
--- a/common/src/tx_event_flags_initialize.c
+++ b/common/src/tx_event_flags_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,17 +99,6 @@ ULONG _tx_event_flags_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_event_flags_initialize(VOID)
{
diff --git a/common/src/tx_event_flags_performance_info_get.c b/common/src/tx_event_flags_performance_info_get.c
index c0529b035..213c2d2a2 100644
--- a/common/src/tx_event_flags_performance_info_get.c
+++ b/common/src/tx_event_flags_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG *sets, ULONG *gets,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common/src/tx_event_flags_performance_system_info_get.c b/common/src/tx_event_flags_performance_system_info_get.c
index 3f1570df1..4902b0e17 100644
--- a/common/src/tx_event_flags_performance_system_info_get.c
+++ b/common/src/tx_event_flags_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_system_info_get(ULONG *sets, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common/src/tx_event_flags_set.c b/common/src/tx_event_flags_set.c
index 8309be14d..749343c81 100644
--- a/common/src/tx_event_flags_set.c
+++ b/common/src/tx_event_flags_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,18 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-25-2022 William E. Lamie Modified comment(s), and */
-/* added corrected preemption */
-/* check logic, resulting in */
-/* version 6.1.11 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG flags_to_set, UINT set_option)
{
@@ -336,8 +325,8 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Disable preemption while we process the suspended list. */
_tx_thread_preempt_disable++;
- /* Since we have temporarily disabled preemption globally, set the preempt
- check flag to check for any preemption condition - including from
+ /* Since we have temporarily disabled preemption globally, set the preempt
+ check flag to check for any preemption condition - including from
unrelated ISR processing. */
preempt_check = TX_TRUE;
diff --git a/common/src/tx_event_flags_set_notify.c b/common/src/tx_event_flags_set_notify.c
index ab2b9a1ce..4cafdd57a 100644
--- a/common/src/tx_event_flags_set_notify.c
+++ b/common/src/tx_event_flags_set_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_set_notify(TX_EVENT_FLAGS_GROUP *group_ptr, VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr))
{
diff --git a/common/src/tx_initialize_high_level.c b/common/src/tx_initialize_high_level.c
index b72245516..77bc3ed78 100644
--- a/common/src/tx_initialize_high_level.c
+++ b/common/src/tx_initialize_high_level.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,14 +101,6 @@ VOID *_tx_initialize_unused_memory;
/* is optionally called by */
/* compiler's startup code. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_initialize_high_level(VOID)
{
diff --git a/common/src/tx_initialize_kernel_enter.c b/common/src/tx_initialize_kernel_enter.c
index e5eda61ed..20dc3017a 100644
--- a/common/src/tx_initialize_kernel_enter.c
+++ b/common/src/tx_initialize_kernel_enter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,21 +83,6 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* */
/* main Application main program */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-25-2022 Scott Larson Modified comment(s), */
-/* added EPK initialization, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added random generator */
-/* initialization, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
VOID _tx_initialize_kernel_enter(VOID)
{
diff --git a/common/src/tx_initialize_kernel_setup.c b/common/src/tx_initialize_kernel_setup.c
index d61e9318d..7a698ba84 100644
--- a/common/src/tx_initialize_kernel_setup.c
+++ b/common/src/tx_initialize_kernel_setup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* startup code Compiler startup code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_initialize_kernel_setup(VOID)
{
diff --git a/common/src/tx_misra.c b/common/src/tx_misra.c
index 90533b967..9abf12f02 100644
--- a/common/src/tx_misra.c
+++ b/common/src/tx_misra.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -32,7 +33,7 @@
#include "tx_api.h"
#else
#define TX_THREAD_INIT
-//CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+//CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
#include "tx_api.h"
#include "tx_thread.h"
diff --git a/common/src/tx_mutex_cleanup.c b/common/src/tx_mutex_cleanup.c
index 09acbf4df..d32f69fc0 100644
--- a/common/src/tx_mutex_cleanup.c
+++ b/common/src/tx_mutex_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_mutex_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_mutex_create.c b/common/src/tx_mutex_create.c
index 993bf3445..436c01f50 100644
--- a/common/src/tx_mutex_create.c
+++ b/common/src/tx_mutex_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_create(TX_MUTEX *mutex_ptr, CHAR *name_ptr, UINT inherit)
{
diff --git a/common/src/tx_mutex_delete.c b/common/src/tx_mutex_delete.c
index ca5aeca86..9c0a5aacd 100644
--- a/common/src/tx_mutex_delete.c
+++ b/common/src/tx_mutex_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_delete(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/tx_mutex_get.c b/common/src/tx_mutex_get.c
index 91e97f14d..402a0f0d0 100644
--- a/common/src/tx_mutex_get.c
+++ b/common/src/tx_mutex_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_get(TX_MUTEX *mutex_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_mutex_info_get.c b/common/src/tx_mutex_info_get.c
index 219bcc181..a24d1e30e 100644
--- a/common/src/tx_mutex_info_get.c
+++ b/common/src/tx_mutex_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_info_get(TX_MUTEX *mutex_ptr, CHAR **name, ULONG *count, TX_THREAD **owner,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/tx_mutex_initialize.c b/common/src/tx_mutex_initialize.c
index ea2ca458b..98460cd69 100644
--- a/common/src/tx_mutex_initialize.c
+++ b/common/src/tx_mutex_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -107,17 +108,6 @@ ULONG _tx_mutex_performance__priority_inheritance_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_mutex_initialize(VOID)
{
diff --git a/common/src/tx_mutex_performance_info_get.c b/common/src/tx_mutex_performance_info_get.c
index 501a417a0..0704c111a 100644
--- a/common/src/tx_mutex_performance_info_get.c
+++ b/common/src/tx_mutex_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_info_get(TX_MUTEX *mutex_ptr, ULONG *puts, ULONG *gets,
ULONG *suspensions, ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
diff --git a/common/src/tx_mutex_performance_system_info_get.c b/common/src/tx_mutex_performance_system_info_get.c
index 9ca171973..458a5945b 100644
--- a/common/src/tx_mutex_performance_system_info_get.c
+++ b/common/src/tx_mutex_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions,
ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
diff --git a/common/src/tx_mutex_prioritize.c b/common/src/tx_mutex_prioritize.c
index 3006b7d0f..6522307d4 100644
--- a/common/src/tx_mutex_prioritize.c
+++ b/common/src/tx_mutex_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_prioritize(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/tx_mutex_priority_change.c b/common/src/tx_mutex_priority_change.c
index 4f9679ef3..846e1a543 100644
--- a/common/src/tx_mutex_priority_change.c
+++ b/common/src/tx_mutex_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,23 +66,6 @@
/* _tx_mutex_get Inherit priority */
/* _tx_mutex_put Restore previous priority */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified comment(s), and */
-/* change thread state from */
-/* TX_SUSPENDED to */
-/* TX_PRIORITY_CHANGE before */
-/* calling */
-/* _tx_thread_system_suspend, */
-/* resulting in version 6.1 */
-/* 04-02-2021 Scott Larson Modified comments, fixed */
-/* mapping current thread's */
-/* priority rather than next, */
-/* resulting in version 6.1.6 */
-/* */
/**************************************************************************/
VOID _tx_mutex_priority_change(TX_THREAD *thread_ptr, UINT new_priority)
{
diff --git a/common/src/tx_mutex_put.c b/common/src/tx_mutex_put.c
index 6ac5065d7..062472a24 100644
--- a/common/src/tx_mutex_put.c
+++ b/common/src/tx_mutex_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_put(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/tx_queue_cleanup.c b/common/src/tx_queue_cleanup.c
index 82d02f45c..05a423b38 100644
--- a/common/src/tx_queue_cleanup.c
+++ b/common/src/tx_queue_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_queue_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_queue_create.c b/common/src/tx_queue_create.c
index 00edbad95..59ae154e4 100644
--- a/common/src/tx_queue_create.c
+++ b/common/src/tx_queue_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_create(TX_QUEUE *queue_ptr, CHAR *name_ptr, UINT message_size,
VOID *queue_start, ULONG queue_size)
diff --git a/common/src/tx_queue_delete.c b/common/src/tx_queue_delete.c
index 9887b1601..6a2bcf6f3 100644
--- a/common/src/tx_queue_delete.c
+++ b/common/src/tx_queue_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_delete(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/tx_queue_flush.c b/common/src/tx_queue_flush.c
index 5120c8988..b721cf50c 100644
--- a/common/src/tx_queue_flush.c
+++ b/common/src/tx_queue_flush.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_flush(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/tx_queue_front_send.c b/common/src/tx_queue_front_send.c
index 5e8b41043..bb39b970b 100644
--- a/common/src/tx_queue_front_send.c
+++ b/common/src/tx_queue_front_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_front_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_queue_info_get.c b/common/src/tx_queue_info_get.c
index 3b37b37fa..d0ecb2b65 100644
--- a/common/src/tx_queue_info_get.c
+++ b/common/src/tx_queue_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_info_get(TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage,
TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue)
diff --git a/common/src/tx_queue_initialize.c b/common/src/tx_queue_initialize.c
index 7a8112345..eb34f18b9 100644
--- a/common/src/tx_queue_initialize.c
+++ b/common/src/tx_queue_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -105,17 +106,6 @@ ULONG _tx_queue_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_queue_initialize(VOID)
{
diff --git a/common/src/tx_queue_performance_info_get.c b/common/src/tx_queue_performance_info_get.c
index 721a7e5f6..7c4265158 100644
--- a/common/src/tx_queue_performance_info_get.c
+++ b/common/src/tx_queue_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_info_get(TX_QUEUE *queue_ptr, ULONG *messages_sent, ULONG *messages_received,
ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
diff --git a/common/src/tx_queue_performance_system_info_get.c b/common/src/tx_queue_performance_system_info_get.c
index 87cfb4a6a..306c97a2d 100644
--- a/common/src/tx_queue_performance_system_info_get.c
+++ b/common/src/tx_queue_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_system_info_get(ULONG *messages_sent, ULONG *messages_received,
ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
diff --git a/common/src/tx_queue_prioritize.c b/common/src/tx_queue_prioritize.c
index 4f875078d..dbea0a6b1 100644
--- a/common/src/tx_queue_prioritize.c
+++ b/common/src/tx_queue_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_prioritize(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/tx_queue_receive.c b/common/src/tx_queue_receive.c
index 31a22f946..a6ab03909 100644
--- a/common/src/tx_queue_receive.c
+++ b/common/src/tx_queue_receive.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_queue_send.c b/common/src/tx_queue_send.c
index 3ca970a01..7d22f5b9c 100644
--- a/common/src/tx_queue_send.c
+++ b/common/src/tx_queue_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_queue_send_notify.c b/common/src/tx_queue_send_notify.c
index f46d153a1..05af2f03a 100644
--- a/common/src/tx_queue_send_notify.c
+++ b/common/src/tx_queue_send_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_send_notify(TX_QUEUE *queue_ptr, VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr))
{
diff --git a/common/src/tx_semaphore_ceiling_put.c b/common/src/tx_semaphore_ceiling_put.c
index a72b094af..9b02e731f 100644
--- a/common/src/tx_semaphore_ceiling_put.c
+++ b/common/src/tx_semaphore_ceiling_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_ceiling_put(TX_SEMAPHORE *semaphore_ptr, ULONG ceiling)
{
diff --git a/common/src/tx_semaphore_cleanup.c b/common/src/tx_semaphore_cleanup.c
index 512f6c60e..0e3cd9652 100644
--- a/common/src/tx_semaphore_cleanup.c
+++ b/common/src/tx_semaphore_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_semaphore_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common/src/tx_semaphore_create.c b/common/src/tx_semaphore_create.c
index 3acf3f411..849f5d3b5 100644
--- a/common/src/tx_semaphore_create.c
+++ b/common/src/tx_semaphore_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_create(TX_SEMAPHORE *semaphore_ptr, CHAR *name_ptr, ULONG initial_count)
{
diff --git a/common/src/tx_semaphore_delete.c b/common/src/tx_semaphore_delete.c
index eee19755f..8a0515a04 100644
--- a/common/src/tx_semaphore_delete.c
+++ b/common/src/tx_semaphore_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_delete(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/tx_semaphore_get.c b/common/src/tx_semaphore_get.c
index 5a4719979..52802da1c 100644
--- a/common/src/tx_semaphore_get.c
+++ b/common/src/tx_semaphore_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_get(TX_SEMAPHORE *semaphore_ptr, ULONG wait_option)
{
diff --git a/common/src/tx_semaphore_info_get.c b/common/src/tx_semaphore_info_get.c
index 70e98a71d..89fd94238 100644
--- a/common/src/tx_semaphore_info_get.c
+++ b/common/src/tx_semaphore_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_info_get(TX_SEMAPHORE *semaphore_ptr, CHAR **name, ULONG *current_value,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/tx_semaphore_initialize.c b/common/src/tx_semaphore_initialize.c
index 84358cc57..d2b169df5 100644
--- a/common/src/tx_semaphore_initialize.c
+++ b/common/src/tx_semaphore_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -97,17 +98,6 @@ ULONG _tx_semaphore_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_semaphore_initialize(VOID)
{
diff --git a/common/src/tx_semaphore_performance_info_get.c b/common/src/tx_semaphore_performance_info_get.c
index a623705f0..4c7ffa4e4 100644
--- a/common/src/tx_semaphore_performance_info_get.c
+++ b/common/src/tx_semaphore_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_info_get(TX_SEMAPHORE *semaphore_ptr, ULONG *puts, ULONG *gets,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common/src/tx_semaphore_performance_system_info_get.c b/common/src/tx_semaphore_performance_system_info_get.c
index 5245d00b6..db17c937f 100644
--- a/common/src/tx_semaphore_performance_system_info_get.c
+++ b/common/src/tx_semaphore_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common/src/tx_semaphore_prioritize.c b/common/src/tx_semaphore_prioritize.c
index 56245df86..eec5e7b76 100644
--- a/common/src/tx_semaphore_prioritize.c
+++ b/common/src/tx_semaphore_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_prioritize(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/tx_semaphore_put.c b/common/src/tx_semaphore_put.c
index dacd0db04..1ce9d1451 100644
--- a/common/src/tx_semaphore_put.c
+++ b/common/src/tx_semaphore_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_put(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/tx_semaphore_put_notify.c b/common/src/tx_semaphore_put_notify.c
index b1abe3be1..80894d6eb 100644
--- a/common/src/tx_semaphore_put_notify.c
+++ b/common/src/tx_semaphore_put_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_put_notify(TX_SEMAPHORE *semaphore_ptr, VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr))
{
diff --git a/common/src/tx_thread_create.c b/common/src/tx_thread_create.c
index 2f4d011d9..026b0ada5 100644
--- a/common/src/tx_thread_create.c
+++ b/common/src/tx_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,24 +75,6 @@
/* Application Code */
/* _tx_timer_initialize Create system timer thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified comment(s), and */
-/* changed stack calculations */
-/* to use ALIGN_TYPE integers, */
-/* resulting in version 6.1 */
-/* 06-02-2021 William E. Lamie Modified comment(s), and */
-/* supported TX_MISRA_ENABLE, */
-/* 08-02-2021 Scott Larson Removed unneeded cast, */
-/* resulting in version 6.1.8 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr, VOID (*entry_function)(ULONG id), ULONG entry_input,
VOID *stack_start, ULONG stack_size, UINT priority, UINT preempt_threshold,
diff --git a/common/src/tx_thread_delete.c b/common/src/tx_thread_delete.c
index 69626c507..510f6565e 100644
--- a/common/src/tx_thread_delete.c
+++ b/common/src/tx_thread_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_delete(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_entry_exit_notify.c b/common/src/tx_thread_entry_exit_notify.c
index 7d5919dec..fdce25efd 100644
--- a/common/src/tx_thread_entry_exit_notify.c
+++ b/common/src/tx_thread_entry_exit_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_entry_exit_notify(TX_THREAD *thread_ptr, VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT id))
{
diff --git a/common/src/tx_thread_identify.c b/common/src/tx_thread_identify.c
index 7808d0531..86f56194c 100644
--- a/common/src/tx_thread_identify.c
+++ b/common/src/tx_thread_identify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
TX_THREAD *_tx_thread_identify(VOID)
{
diff --git a/common/src/tx_thread_info_get.c b/common/src/tx_thread_info_get.c
index d90694579..740a3b95d 100644
--- a/common/src/tx_thread_info_get.c
+++ b/common/src/tx_thread_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_info_get(TX_THREAD *thread_ptr, CHAR **name, UINT *state, ULONG *run_count,
UINT *priority, UINT *preemption_threshold, ULONG *time_slice,
diff --git a/common/src/tx_thread_initialize.c b/common/src/tx_thread_initialize.c
index 11ddcc674..c9cfea339 100644
--- a/common/src/tx_thread_initialize.c
+++ b/common/src/tx_thread_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -48,7 +49,7 @@ TX_THREAD * _tx_thread_current_ptr;
/* Define the variable that holds the next thread to execute. It is important
- to remember that this is not necessarily equal to the current thread
+ to remember that this is not necessarily equal to the current thread
pointer. */
TX_THREAD * _tx_thread_execute_ptr;
@@ -65,7 +66,7 @@ ULONG _tx_thread_created_count;
/* Define the current state variable. When this value is 0, a thread
- is executing or the system is idle. Other values indicate that
+ is executing or the system is idle. Other values indicate that
interrupt or initialization processing is active. This variable is
initialized to TX_INITIALIZE_IN_PROGRESS to indicate initialization is
active. */
@@ -74,15 +75,15 @@ volatile ULONG _tx_thread_system_state = TX_INITIALIZE_IN_PROGRESS;
/* Define the 32-bit priority bit-maps. There is one priority bit map for each
- 32 priority levels supported. If only 32 priorities are supported there is
- only one bit map. Each bit within a priority bit map represents that one
+ 32 priority levels supported. If only 32 priorities are supported there is
+ only one bit map. Each bit within a priority bit map represents that one
or more threads at the associated thread priority are ready. */
ULONG _tx_thread_priority_maps[TX_MAX_PRIORITIES/32];
-/* Define the priority map active bit map that specifies which of the previously
- defined priority maps have something set. This is only necessary if more than
+/* Define the priority map active bit map that specifies which of the previously
+ defined priority maps have something set. This is only necessary if more than
32 priorities are supported. */
#if TX_MAX_PRIORITIES > 32
@@ -92,17 +93,17 @@ ULONG _tx_thread_priority_map_active;
#ifndef TX_DISABLE_PREEMPTION_THRESHOLD
-/* Define the 32-bit preempt priority bit maps. There is one preempt bit map
- for each 32 priority levels supported. If only 32 priorities are supported
- there is only one bit map. Each set set bit corresponds to a preempted priority
- level that had preemption-threshold active to protect against preemption of a
+/* Define the 32-bit preempt priority bit maps. There is one preempt bit map
+ for each 32 priority levels supported. If only 32 priorities are supported
+ there is only one bit map. Each set set bit corresponds to a preempted priority
+ level that had preemption-threshold active to protect against preemption of a
range of relatively higher priority threads. */
ULONG _tx_thread_preempted_maps[TX_MAX_PRIORITIES/32];
-/* Define the preempt map active bit map that specifies which of the previously
- defined preempt maps have something set. This is only necessary if more than
+/* Define the preempt map active bit map that specifies which of the previously
+ defined preempt maps have something set. This is only necessary if more than
32 priorities are supported. */
#if TX_MAX_PRIORITIES > 32
@@ -110,7 +111,7 @@ ULONG _tx_thread_preempted_map_active;
#endif
#endif
-/* Define the variable that holds the highest priority group ready for
+/* Define the variable that holds the highest priority group ready for
execution. It is important to note that this is not necessarily the same
as the priority of the thread pointed to by _tx_execute_thread. */
@@ -126,13 +127,13 @@ TX_THREAD * _tx_thread_priority_list[TX_MAX_PRIORITIES];
/* Define the global preempt disable variable. If this is non-zero, preemption is
- disabled. It is used internally by ThreadX to prevent preemption of a thread in
+ disabled. It is used internally by ThreadX to prevent preemption of a thread in
the middle of a service that is resuming or suspending another thread. */
volatile UINT _tx_thread_preempt_disable;
-/* Define the global function pointer for mutex cleanup on thread completion or
+/* Define the global function pointer for mutex cleanup on thread completion or
termination. This pointer is setup during mutex initialization. */
VOID (*_tx_thread_mutex_release)(TX_THREAD *thread_ptr);
@@ -176,8 +177,8 @@ ULONG _tx_build_options;
#if defined(TX_ENABLE_STACK_CHECKING) || defined(TX_PORT_THREAD_STACK_ERROR_HANDLING)
-/* Define the global function pointer for stack error handling. If a stack error is
- detected and the application has registered a stack error handler, it will be
+/* Define the global function pointer for stack error handling. If a stack error is
+ detected and the application has registered a stack error handler, it will be
called via this function pointer. */
VOID (*_tx_thread_application_stack_error_handler)(TX_THREAD *thread_ptr);
@@ -192,20 +193,20 @@ VOID (*_tx_thread_application_stack_error_handler)(TX_THREAD *thread_
ULONG _tx_thread_performance_resume_count;
-/* Define the total number of thread suspensions. Each time a thread enters a
+/* Define the total number of thread suspensions. Each time a thread enters a
suspended state this variable is incremented. */
ULONG _tx_thread_performance_suspend_count;
-/* Define the total number of solicited thread preemptions. Each time a thread is
+/* Define the total number of solicited thread preemptions. Each time a thread is
preempted by directly calling a ThreadX service, this variable is incremented. */
ULONG _tx_thread_performance_solicited_preemption_count;
-/* Define the total number of interrupt thread preemptions. Each time a thread is
- preempted as a result of an ISR calling a ThreadX service, this variable is
+/* Define the total number of interrupt thread preemptions. Each time a thread is
+ preempted as a result of an ISR calling a ThreadX service, this variable is
incremented. */
ULONG _tx_thread_performance_interrupt_preemption_count;
@@ -217,45 +218,45 @@ ULONG _tx_thread_performance_interrupt_preemption_count;
ULONG _tx_thread_performance_priority_inversion_count;
-/* Define the total number of time-slices. Each time a time-slice operation is
- actually performed (another thread is setup for running) this variable is
+/* Define the total number of time-slices. Each time a time-slice operation is
+ actually performed (another thread is setup for running) this variable is
incremented. */
ULONG _tx_thread_performance_time_slice_count;
-/* Define the total number of thread relinquish operations. Each time a thread
+/* Define the total number of thread relinquish operations. Each time a thread
relinquish operation is actually performed (another thread is setup for running)
this variable is incremented. */
ULONG _tx_thread_performance_relinquish_count;
-/* Define the total number of thread timeouts. Each time a thread has a
+/* Define the total number of thread timeouts. Each time a thread has a
timeout this variable is incremented. */
ULONG _tx_thread_performance_timeout_count;
-/* Define the total number of thread wait aborts. Each time a thread's suspension
+/* Define the total number of thread wait aborts. Each time a thread's suspension
is lifted by the tx_thread_wait_abort call this variable is incremented. */
ULONG _tx_thread_performance_wait_abort_count;
-/* Define the total number of idle system thread returns. Each time a thread returns to
+/* Define the total number of idle system thread returns. Each time a thread returns to
an idle system (no other thread is ready to run) this variable is incremented. */
ULONG _tx_thread_performance_idle_return_count;
-/* Define the total number of non-idle system thread returns. Each time a thread returns to
+/* Define the total number of non-idle system thread returns. Each time a thread returns to
a non-idle system (another thread is ready to run) this variable is incremented. */
ULONG _tx_thread_performance_non_idle_return_count;
-/* Define the last TX_THREAD_EXECUTE_LOG_SIZE threads scheduled in ThreadX. This
+/* Define the last TX_THREAD_EXECUTE_LOG_SIZE threads scheduled in ThreadX. This
is a circular list, where the index points to the oldest entry. */
ULONG _tx_thread_performance__execute_log_index;
@@ -266,7 +267,7 @@ TX_THREAD * _tx_thread_performance_execute_log[TX_THREAD_EXECUTE_LOG_SIZE];
/* Define special string. */
#ifndef TX_MISRA_ENABLE
-const CHAR _tx_thread_special_string[] =
+const CHAR _tx_thread_special_string[] =
"G-ML-EL-ML-BL-DL-BL-GB-GL-M-D-DL-GZ-KH-EL-CM-NH-HA-GF-DD-JC-YZ-CT-AT-DW-USA-CA-SD-SDSU";
#endif
@@ -302,25 +303,11 @@ const CHAR _tx_thread_special_string[] =
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), added */
-/* Execution Profile support, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* */
/**************************************************************************/
VOID _tx_thread_initialize(VOID)
{
- /* Note: the system stack pointer and the system state variables are
+ /* Note: the system stack pointer and the system state variables are
initialized by the low and high-level initialization functions,
respectively. */
@@ -388,8 +375,8 @@ VOID _tx_thread_initialize(VOID)
#endif
/* Setup the build options flag. This is used to identify how the ThreadX library was constructed. */
- _tx_build_options = _tx_build_options
- | (((ULONG) (TX_MAX_PRIORITIES/32)) << 24)
+ _tx_build_options = _tx_build_options
+ | (((ULONG) (TX_MAX_PRIORITIES/32)) << 24)
#ifdef TX_NOT_INTERRUPTABLE
| (((ULONG) 1) << 31)
#endif
diff --git a/common/src/tx_thread_performance_info_get.c b/common/src/tx_thread_performance_info_get.c
index 92c0e02bd..79a8c7ee2 100644
--- a/common/src/tx_thread_performance_info_get.c
+++ b/common/src/tx_thread_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -87,14 +88,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_info_get(TX_THREAD *thread_ptr, ULONG *resumptions, ULONG *suspensions,
ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions,
diff --git a/common/src/tx_thread_performance_system_info_get.c b/common/src/tx_thread_performance_system_info_get.c
index a6c300aa0..8ade15ddb 100644
--- a/common/src/tx_thread_performance_system_info_get.c
+++ b/common/src/tx_thread_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -87,14 +88,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_system_info_get(ULONG *resumptions, ULONG *suspensions,
ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions,
diff --git a/common/src/tx_thread_preemption_change.c b/common/src/tx_thread_preemption_change.c
index cafb5792b..59a37514b 100644
--- a/common/src/tx_thread_preemption_change.c
+++ b/common/src/tx_thread_preemption_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_preemption_change(TX_THREAD *thread_ptr, UINT new_threshold, UINT *old_threshold)
{
diff --git a/common/src/tx_thread_priority_change.c b/common/src/tx_thread_priority_change.c
index 9e8da1880..bdf2a9930 100644
--- a/common/src/tx_thread_priority_change.c
+++ b/common/src/tx_thread_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,19 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified comment(s), and */
-/* change thread state from */
-/* TX_SUSPENDED to */
-/* TX_PRIORITY_CHANGE before */
-/* calling */
-/* _tx_thread_system_suspend, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_priority_change(TX_THREAD *thread_ptr, UINT new_priority, UINT *old_priority)
{
diff --git a/common/src/tx_thread_relinquish.c b/common/src/tx_thread_relinquish.c
index 6f3a33abd..c84e4d992 100644
--- a/common/src/tx_thread_relinquish.c
+++ b/common/src/tx_thread_relinquish.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_relinquish(VOID)
{
diff --git a/common/src/tx_thread_reset.c b/common/src/tx_thread_reset.c
index 1fea78be7..da56daf57 100644
--- a/common/src/tx_thread_reset.c
+++ b/common/src/tx_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_resume.c b/common/src/tx_thread_resume.c
index b97bdb4b7..f662be5a8 100644
--- a/common/src/tx_thread_resume.c
+++ b/common/src/tx_thread_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_resume(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_shell_entry.c b/common/src/tx_thread_shell_entry.c
index 161ea80e3..45fe9d6da 100644
--- a/common/src/tx_thread_shell_entry.c
+++ b/common/src/tx_thread_shell_entry.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Initial thread stack frame */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_shell_entry(VOID)
{
diff --git a/common/src/tx_thread_sleep.c b/common/src/tx_thread_sleep.c
index 6d6c92c43..fd986a0b6 100644
--- a/common/src/tx_thread_sleep.c
+++ b/common/src/tx_thread_sleep.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_sleep(ULONG timer_ticks)
{
diff --git a/common/src/tx_thread_stack_analyze.c b/common/src/tx_thread_stack_analyze.c
index bdadab0df..080d00522 100644
--- a/common/src/tx_thread_stack_analyze.c
+++ b/common/src/tx_thread_stack_analyze.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* ThreadX internal code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_stack_analyze(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_stack_error_handler.c b/common/src/tx_thread_stack_error_handler.c
index 6e2422edc..2a63fe4e7 100644
--- a/common/src/tx_thread_stack_error_handler.c
+++ b/common/src/tx_thread_stack_error_handler.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,26 +61,6 @@
/* */
/* ThreadX internal code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* update misra support, */
-/* resulting in version 6.1 */
-/* 10-16-2020 William E. Lamie Modified comment(s), */
-/* fixed link issue, */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 William E. Lamie Modified comment(s), */
-/* fixed link issue, added */
-/* conditional compilation */
-/* for ARMv8-M (Cortex M23/33) */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* */
/**************************************************************************/
VOID _tx_thread_stack_error_handler(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_stack_error_notify.c b/common/src/tx_thread_stack_error_notify.c
index 796ff460c..d1c76213d 100644
--- a/common/src/tx_thread_stack_error_notify.c
+++ b/common/src/tx_thread_stack_error_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,21 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), added */
-/* conditional compilation */
-/* for ARMv8-M (Cortex M23/33) */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* */
/**************************************************************************/
UINT _tx_thread_stack_error_notify(VOID (*stack_error_handler)(TX_THREAD *thread_ptr))
{
diff --git a/common/src/tx_thread_suspend.c b/common/src/tx_thread_suspend.c
index ccf3ebc33..460944b66 100644
--- a/common/src/tx_thread_suspend.c
+++ b/common/src/tx_thread_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,18 +63,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 10-16-2020 Yuxin Zhou Modified comment(s), and */
-/* added type cast to address */
-/* a MISRA compliance issue, */
-/* resulting in version 6.1.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_system_preempt_check.c b/common/src/tx_thread_system_preempt_check.c
index 7511a02cb..9dd039deb 100644
--- a/common/src/tx_thread_system_preempt_check.c
+++ b/common/src/tx_thread_system_preempt_check.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_preempt_check(VOID)
{
diff --git a/common/src/tx_thread_system_resume.c b/common/src/tx_thread_system_resume.c
index 7b9f557d7..708e5e5ed 100644
--- a/common/src/tx_thread_system_resume.c
+++ b/common/src/tx_thread_system_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* _tx_thread_wait_abort Thread wait abort */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_resume(TX_THREAD *thread_ptr)
#ifndef TX_NOT_INTERRUPTABLE
diff --git a/common/src/tx_thread_system_suspend.c b/common/src/tx_thread_system_suspend.c
index 33f8cac28..4cc14f5a1 100644
--- a/common/src/tx_thread_system_suspend.c
+++ b/common/src/tx_thread_system_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* _tx_thread_terminate Thread terminate */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_suspend(TX_THREAD *thread_ptr)
#ifndef TX_NOT_INTERRUPTABLE
diff --git a/common/src/tx_thread_terminate.c b/common/src/tx_thread_terminate.c
index 1e30687f5..86e34baeb 100644
--- a/common/src/tx_thread_terminate.c
+++ b/common/src/tx_thread_terminate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_terminate(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_thread_time_slice.c b/common/src/tx_thread_time_slice.c
index 31bc45ad1..129ca3225 100644
--- a/common/src/tx_thread_time_slice.c
+++ b/common/src/tx_thread_time_slice.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,16 +65,6 @@
/* */
/* _tx_timer_interrupt Timer interrupt handling */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Scott Larson Modified comment(s), and */
-/* opt out of function when */
-/* TX_NO_TIMER is defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_time_slice(VOID)
{
diff --git a/common/src/tx_thread_time_slice_change.c b/common/src/tx_thread_time_slice_change.c
index c15c9ae37..67a1c26be 100644
--- a/common/src/tx_thread_time_slice_change.c
+++ b/common/src/tx_thread_time_slice_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_time_slice_change(TX_THREAD *thread_ptr, ULONG new_time_slice, ULONG *old_time_slice)
{
diff --git a/common/src/tx_thread_timeout.c b/common/src/tx_thread_timeout.c
index 33ea53522..21b62e344 100644
--- a/common/src/tx_thread_timeout.c
+++ b/common/src/tx_thread_timeout.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* _tx_timer_expiration_process Timer expiration function */
/* _tx_timer_thread_entry Timer thread function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_timeout(ULONG timeout_input)
{
diff --git a/common/src/tx_thread_wait_abort.c b/common/src/tx_thread_wait_abort.c
index 372a72b29..24bce69b3 100644
--- a/common/src/tx_thread_wait_abort.c
+++ b/common/src/tx_thread_wait_abort.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,17 +64,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 03-08-2023 Scott Larson Check if thread is coming out */
-/* of suspension elsewhere, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_wait_abort(TX_THREAD *thread_ptr)
{
diff --git a/common/src/tx_time_get.c b/common/src/tx_time_get.c
index 163611420..6ed7d731d 100644
--- a/common/src/tx_time_get.c
+++ b/common/src/tx_time_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,16 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 12-31-2020 Andres Mlinar Modified comment(s), */
-/* resulting in version 6.1.3 */
-/* */
/**************************************************************************/
ULONG _tx_time_get(VOID)
{
diff --git a/common/src/tx_time_set.c b/common/src/tx_time_set.c
index 613274ac2..97b429860 100644
--- a/common/src/tx_time_set.c
+++ b/common/src/tx_time_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_time_set(ULONG new_time)
{
diff --git a/common/src/tx_timer_activate.c b/common/src/tx_timer_activate.c
index d8609573c..5a59eade1 100644
--- a/common/src/tx_timer_activate.c
+++ b/common/src/tx_timer_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_activate(TX_TIMER *timer_ptr)
{
diff --git a/common/src/tx_timer_change.c b/common/src/tx_timer_change.c
index 420ff26a9..24661d3d0 100644
--- a/common/src/tx_timer_change.c
+++ b/common/src/tx_timer_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
{
diff --git a/common/src/tx_timer_create.c b/common/src/tx_timer_create.c
index 707e743ba..30dd4e11f 100644
--- a/common/src/tx_timer_create.c
+++ b/common/src/tx_timer_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr,
VOID (*expiration_function)(ULONG id), ULONG expiration_input,
diff --git a/common/src/tx_timer_deactivate.c b/common/src/tx_timer_deactivate.c
index 97c786bf1..98eacd4b1 100644
--- a/common/src/tx_timer_deactivate.c
+++ b/common/src/tx_timer_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_deactivate(TX_TIMER *timer_ptr)
{
diff --git a/common/src/tx_timer_delete.c b/common/src/tx_timer_delete.c
index 7baef6d4c..60d425ec5 100644
--- a/common/src/tx_timer_delete.c
+++ b/common/src/tx_timer_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_delete(TX_TIMER *timer_ptr)
{
diff --git a/common/src/tx_timer_expiration_process.c b/common/src/tx_timer_expiration_process.c
index 72faed119..33923a937 100644
--- a/common/src/tx_timer_expiration_process.c
+++ b/common/src/tx_timer_expiration_process.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,16 +68,6 @@
/* */
/* _tx_timer_interrupt Timer interrupt handler */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Scott Larson Modified comment(s), and */
-/* opt out of function when */
-/* TX_NO_TIMER is defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_expiration_process(VOID)
{
diff --git a/common/src/tx_timer_info_get.c b/common/src/tx_timer_info_get.c
index ca04c4eaf..31c801f9b 100644
--- a/common/src/tx_timer_info_get.c
+++ b/common/src/tx_timer_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_info_get(TX_TIMER *timer_ptr, CHAR **name, UINT *active, ULONG *remaining_ticks,
ULONG *reschedule_ticks, TX_TIMER **next_timer)
diff --git a/common/src/tx_timer_initialize.c b/common/src/tx_timer_initialize.c
index 1ae442dfa..2172b4a64 100644
--- a/common/src/tx_timer_initialize.c
+++ b/common/src/tx_timer_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -192,14 +193,6 @@ ULONG _tx_timer_time_slice;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_initialize(VOID)
{
diff --git a/common/src/tx_timer_performance_info_get.c b/common/src/tx_timer_performance_info_get.c
index 05e332c1c..37cacee45 100644
--- a/common/src/tx_timer_performance_info_get.c
+++ b/common/src/tx_timer_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_info_get(TX_TIMER *timer_ptr, ULONG *activates, ULONG *reactivates,
ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
diff --git a/common/src/tx_timer_performance_system_info_get.c b/common/src/tx_timer_performance_system_info_get.c
index 367e11490..9b6c38620 100644
--- a/common/src/tx_timer_performance_system_info_get.c
+++ b/common/src/tx_timer_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_system_info_get(ULONG *activates, ULONG *reactivates,
ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
diff --git a/common/src/tx_timer_system_activate.c b/common/src/tx_timer_system_activate.c
index 4c6f7b04b..af57fdf57 100644
--- a/common/src/tx_timer_system_activate.c
+++ b/common/src/tx_timer_system_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,16 +65,6 @@
/* _tx_timer_thread_entry Timer thread processing */
/* _tx_timer_activate Application timer activate */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Scott Larson Modified comment(s), and */
-/* opt out of function when */
-/* TX_NO_TIMER is defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_system_activate(TX_TIMER_INTERNAL *timer_ptr)
{
diff --git a/common/src/tx_timer_system_deactivate.c b/common/src/tx_timer_system_deactivate.c
index 487ead9da..ae9550776 100644
--- a/common/src/tx_timer_system_deactivate.c
+++ b/common/src/tx_timer_system_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* _tx_thread_system_resume Thread resume function */
/* _tx_timer_thread_entry Timer thread processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_system_deactivate(TX_TIMER_INTERNAL *timer_ptr)
{
diff --git a/common/src/tx_timer_thread_entry.c b/common/src/tx_timer_thread_entry.c
index 330742394..971a0703f 100644
--- a/common/src/tx_timer_thread_entry.c
+++ b/common/src/tx_timer_thread_entry.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* ThreadX Scheduler */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_TIMER_PROCESS_IN_ISR
VOID _tx_timer_thread_entry(ULONG timer_thread_input)
diff --git a/common/src/tx_trace_buffer_full_notify.c b/common/src/tx_trace_buffer_full_notify.c
index 9e07c0a31..7253e8a47 100644
--- a/common/src/tx_trace_buffer_full_notify.c
+++ b/common/src/tx_trace_buffer_full_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_buffer_full_notify(VOID (*full_buffer_callback)(VOID *buffer))
{
diff --git a/common/src/tx_trace_disable.c b/common/src/tx_trace_disable.c
index 1ef211e00..96c287407 100644
--- a/common/src/tx_trace_disable.c
+++ b/common/src/tx_trace_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_disable(VOID)
{
diff --git a/common/src/tx_trace_enable.c b/common/src/tx_trace_enable.c
index aa372e8da..2fb1252c9 100644
--- a/common/src/tx_trace_enable.c
+++ b/common/src/tx_trace_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_enable(VOID *trace_buffer_start, ULONG trace_buffer_size, ULONG registry_entries)
{
diff --git a/common/src/tx_trace_event_filter.c b/common/src/tx_trace_event_filter.c
index 3afb8ed5c..9caf18ae7 100644
--- a/common/src/tx_trace_event_filter.c
+++ b/common/src/tx_trace_event_filter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_filter(ULONG event_filter_bits)
{
diff --git a/common/src/tx_trace_event_unfilter.c b/common/src/tx_trace_event_unfilter.c
index f9d054d78..652e4143c 100644
--- a/common/src/tx_trace_event_unfilter.c
+++ b/common/src/tx_trace_event_unfilter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_unfilter(ULONG event_unfilter_bits)
{
diff --git a/common/src/tx_trace_initialize.c b/common/src/tx_trace_initialize.c
index 14877b9cb..5cec8eae2 100644
--- a/common/src/tx_trace_initialize.c
+++ b/common/src/tx_trace_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -125,14 +126,6 @@ ULONG _tx_trace_registry_search_start;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_initialize(VOID)
{
diff --git a/common/src/tx_trace_interrupt_control.c b/common/src/tx_trace_interrupt_control.c
index 595dff77d..2e35c62d7 100644
--- a/common/src/tx_trace_interrupt_control.c
+++ b/common/src/tx_trace_interrupt_control.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_interrupt_control(UINT new_posture)
{
diff --git a/common/src/tx_trace_isr_enter_insert.c b/common/src/tx_trace_isr_enter_insert.c
index 628cc8fff..f9971cf22 100644
--- a/common/src/tx_trace_isr_enter_insert.c
+++ b/common/src/tx_trace_isr_enter_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_enter_insert(ULONG isr_id)
{
diff --git a/common/src/tx_trace_isr_exit_insert.c b/common/src/tx_trace_isr_exit_insert.c
index 0d743c19e..a4a8ade88 100644
--- a/common/src/tx_trace_isr_exit_insert.c
+++ b/common/src/tx_trace_isr_exit_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_exit_insert(ULONG isr_id)
{
diff --git a/common/src/tx_trace_object_register.c b/common/src/tx_trace_object_register.c
index 0805063de..f7cd4a4a1 100644
--- a/common/src/tx_trace_object_register.c
+++ b/common/src/tx_trace_object_register.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,17 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 07-29-2022 Scott Larson Modified comment(s), */
-/* check for null name, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
VOID _tx_trace_object_register(UCHAR object_type, VOID *object_ptr, CHAR *object_name, ULONG parameter_1, ULONG parameter_2)
{
diff --git a/common/src/tx_trace_object_unregister.c b/common/src/tx_trace_object_unregister.c
index a7fef275e..2166c9734 100644
--- a/common/src/tx_trace_object_unregister.c
+++ b/common/src/tx_trace_object_unregister.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_object_unregister(VOID *object_ptr)
{
diff --git a/common/src/tx_trace_user_event_insert.c b/common/src/tx_trace_user_event_insert.c
index fda096106..787a55f0a 100644
--- a/common/src/tx_trace_user_event_insert.c
+++ b/common/src/tx_trace_user_event_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_user_event_insert(ULONG event_id, ULONG info_field_1, ULONG info_field_2, ULONG info_field_3, ULONG info_field_4)
{
diff --git a/common/src/txe_block_allocate.c b/common/src/txe_block_allocate.c
index 5564354bd..c9c7a1a84 100644
--- a/common/src/txe_block_allocate.c
+++ b/common/src/txe_block_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_allocate(TX_BLOCK_POOL *pool_ptr, VOID **block_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_block_pool_create.c b/common/src/txe_block_pool_create.c
index 8cbeadbde..08ef7e69d 100644
--- a/common/src/txe_block_pool_create.c
+++ b/common/src/txe_block_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_create(TX_BLOCK_POOL *pool_ptr, CHAR *name_ptr, ULONG block_size,
VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
diff --git a/common/src/txe_block_pool_delete.c b/common/src/txe_block_pool_delete.c
index 844ff57a6..f9af71cb5 100644
--- a/common/src/txe_block_pool_delete.c
+++ b/common/src/txe_block_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_delete(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common/src/txe_block_pool_info_get.c b/common/src/txe_block_pool_info_get.c
index 77d9df4a4..f91ca2060 100644
--- a/common/src/txe_block_pool_info_get.c
+++ b/common/src/txe_block_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_info_get(TX_BLOCK_POOL *pool_ptr, CHAR **name, ULONG *available_blocks,
ULONG *total_blocks, TX_THREAD **first_suspended,
diff --git a/common/src/txe_block_pool_prioritize.c b/common/src/txe_block_pool_prioritize.c
index 593ac6dc6..877420112 100644
--- a/common/src/txe_block_pool_prioritize.c
+++ b/common/src/txe_block_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_prioritize(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common/src/txe_block_release.c b/common/src/txe_block_release.c
index e7eaed249..ba63d0b63 100644
--- a/common/src/txe_block_release.c
+++ b/common/src/txe_block_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_release(VOID *block_ptr)
{
diff --git a/common/src/txe_byte_allocate.c b/common/src/txe_byte_allocate.c
index dbb3937e7..dacbede9d 100644
--- a/common/src/txe_byte_allocate.c
+++ b/common/src/txe_byte_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_allocate(TX_BYTE_POOL *pool_ptr, VOID **memory_ptr,
ULONG memory_size, ULONG wait_option)
diff --git a/common/src/txe_byte_pool_create.c b/common/src/txe_byte_pool_create.c
index 2f37d0637..99a896981 100644
--- a/common/src/txe_byte_pool_create.c
+++ b/common/src/txe_byte_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_create(TX_BYTE_POOL *pool_ptr, CHAR *name_ptr, VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
{
diff --git a/common/src/txe_byte_pool_delete.c b/common/src/txe_byte_pool_delete.c
index 2a6baad26..6bbeb8f0f 100644
--- a/common/src/txe_byte_pool_delete.c
+++ b/common/src/txe_byte_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_delete(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common/src/txe_byte_pool_info_get.c b/common/src/txe_byte_pool_info_get.c
index 0a7536ef7..85e7a233a 100644
--- a/common/src/txe_byte_pool_info_get.c
+++ b/common/src/txe_byte_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_info_get(TX_BYTE_POOL *pool_ptr, CHAR **name, ULONG *available_bytes,
ULONG *fragments, TX_THREAD **first_suspended,
diff --git a/common/src/txe_byte_pool_prioritize.c b/common/src/txe_byte_pool_prioritize.c
index a0f0f1aef..9acec73c9 100644
--- a/common/src/txe_byte_pool_prioritize.c
+++ b/common/src/txe_byte_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_prioritize(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common/src/txe_byte_release.c b/common/src/txe_byte_release.c
index 67f91907d..89c3a82bd 100644
--- a/common/src/txe_byte_release.c
+++ b/common/src/txe_byte_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_release(VOID *memory_ptr)
{
diff --git a/common/src/txe_event_flags_create.c b/common/src/txe_event_flags_create.c
index 4c71bd952..4e3fed773 100644
--- a/common/src/txe_event_flags_create.c
+++ b/common/src/txe_event_flags_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr, UINT event_control_block_size)
{
diff --git a/common/src/txe_event_flags_delete.c b/common/src/txe_event_flags_delete.c
index 660662767..23c048077 100644
--- a/common/src/txe_event_flags_delete.c
+++ b/common/src/txe_event_flags_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_delete(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common/src/txe_event_flags_get.c b/common/src/txe_event_flags_get.c
index 237676301..1e9c6e0cb 100644
--- a/common/src/txe_event_flags_get.c
+++ b/common/src/txe_event_flags_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG requested_flags,
UINT get_option, ULONG *actual_flags_ptr, ULONG wait_option)
diff --git a/common/src/txe_event_flags_info_get.c b/common/src/txe_event_flags_info_get.c
index 3400c55e0..e551d025c 100644
--- a/common/src/txe_event_flags_info_get.c
+++ b/common/src/txe_event_flags_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR **name, ULONG *current_flags,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/txe_event_flags_set.c b/common/src/txe_event_flags_set.c
index 03d309ab3..4df57fad1 100644
--- a/common/src/txe_event_flags_set.c
+++ b/common/src/txe_event_flags_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG flags_to_set, UINT set_option)
{
diff --git a/common/src/txe_event_flags_set_notify.c b/common/src/txe_event_flags_set_notify.c
index f93963d3b..51887fd75 100644
--- a/common/src/txe_event_flags_set_notify.c
+++ b/common/src/txe_event_flags_set_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set_notify(TX_EVENT_FLAGS_GROUP *group_ptr, VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr))
{
diff --git a/common/src/txe_mutex_create.c b/common/src/txe_mutex_create.c
index fb65a5bee..392f8b0ed 100644
--- a/common/src/txe_mutex_create.c
+++ b/common/src/txe_mutex_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_create(TX_MUTEX *mutex_ptr, CHAR *name_ptr, UINT inherit, UINT mutex_control_block_size)
{
diff --git a/common/src/txe_mutex_delete.c b/common/src/txe_mutex_delete.c
index b2a3fd2b6..3692bf898 100644
--- a/common/src/txe_mutex_delete.c
+++ b/common/src/txe_mutex_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_delete(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/txe_mutex_get.c b/common/src/txe_mutex_get.c
index 7ef04eef2..2d457c82b 100644
--- a/common/src/txe_mutex_get.c
+++ b/common/src/txe_mutex_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_get(TX_MUTEX *mutex_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_mutex_info_get.c b/common/src/txe_mutex_info_get.c
index 826fead1f..f4ef4168c 100644
--- a/common/src/txe_mutex_info_get.c
+++ b/common/src/txe_mutex_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_info_get(TX_MUTEX *mutex_ptr, CHAR **name, ULONG *count, TX_THREAD **owner,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/txe_mutex_prioritize.c b/common/src/txe_mutex_prioritize.c
index 9ae4b868f..d3302c1c5 100644
--- a/common/src/txe_mutex_prioritize.c
+++ b/common/src/txe_mutex_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_prioritize(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/txe_mutex_put.c b/common/src/txe_mutex_put.c
index 85d5929fc..8a085b7bb 100644
--- a/common/src/txe_mutex_put.c
+++ b/common/src/txe_mutex_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_put(TX_MUTEX *mutex_ptr)
{
diff --git a/common/src/txe_queue_create.c b/common/src/txe_queue_create.c
index 2d91cc9ff..185289fef 100644
--- a/common/src/txe_queue_create.c
+++ b/common/src/txe_queue_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_create(TX_QUEUE *queue_ptr, CHAR *name_ptr, UINT message_size,
VOID *queue_start, ULONG queue_size, UINT queue_control_block_size)
diff --git a/common/src/txe_queue_delete.c b/common/src/txe_queue_delete.c
index 3062edebd..43dc9d6f6 100644
--- a/common/src/txe_queue_delete.c
+++ b/common/src/txe_queue_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_delete(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/txe_queue_flush.c b/common/src/txe_queue_flush.c
index 348de23e5..b514db958 100644
--- a/common/src/txe_queue_flush.c
+++ b/common/src/txe_queue_flush.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_flush(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/txe_queue_front_send.c b/common/src/txe_queue_front_send.c
index 21c254abf..798aada67 100644
--- a/common/src/txe_queue_front_send.c
+++ b/common/src/txe_queue_front_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_front_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_queue_info_get.c b/common/src/txe_queue_info_get.c
index b4507b01b..78d983924 100644
--- a/common/src/txe_queue_info_get.c
+++ b/common/src/txe_queue_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_info_get(TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage,
TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue)
diff --git a/common/src/txe_queue_prioritize.c b/common/src/txe_queue_prioritize.c
index f74809a14..ba40b02ab 100644
--- a/common/src/txe_queue_prioritize.c
+++ b/common/src/txe_queue_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_prioritize(TX_QUEUE *queue_ptr)
{
diff --git a/common/src/txe_queue_receive.c b/common/src/txe_queue_receive.c
index b40e6a561..de6f4dcdd 100644
--- a/common/src/txe_queue_receive.c
+++ b/common/src/txe_queue_receive.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_queue_send.c b/common/src/txe_queue_send.c
index 5873f025c..1b752e75f 100644
--- a/common/src/txe_queue_send.c
+++ b/common/src/txe_queue_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_queue_send_notify.c b/common/src/txe_queue_send_notify.c
index 9ffb0a93d..dd2beaf24 100644
--- a/common/src/txe_queue_send_notify.c
+++ b/common/src/txe_queue_send_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_send_notify(TX_QUEUE *queue_ptr, VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr))
{
diff --git a/common/src/txe_semaphore_ceiling_put.c b/common/src/txe_semaphore_ceiling_put.c
index 51fee9d73..4c8b4603a 100644
--- a/common/src/txe_semaphore_ceiling_put.c
+++ b/common/src/txe_semaphore_ceiling_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_ceiling_put(TX_SEMAPHORE *semaphore_ptr, ULONG ceiling)
{
diff --git a/common/src/txe_semaphore_create.c b/common/src/txe_semaphore_create.c
index 3390491c6..a190b03c0 100644
--- a/common/src/txe_semaphore_create.c
+++ b/common/src/txe_semaphore_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_create(TX_SEMAPHORE *semaphore_ptr, CHAR *name_ptr, ULONG initial_count, UINT semaphore_control_block_size)
{
diff --git a/common/src/txe_semaphore_delete.c b/common/src/txe_semaphore_delete.c
index 2083a22af..3d9f366c2 100644
--- a/common/src/txe_semaphore_delete.c
+++ b/common/src/txe_semaphore_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_delete(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/txe_semaphore_get.c b/common/src/txe_semaphore_get.c
index 403d43b42..7b92d317f 100644
--- a/common/src/txe_semaphore_get.c
+++ b/common/src/txe_semaphore_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_get(TX_SEMAPHORE *semaphore_ptr, ULONG wait_option)
{
diff --git a/common/src/txe_semaphore_info_get.c b/common/src/txe_semaphore_info_get.c
index 142bad377..7695028e4 100644
--- a/common/src/txe_semaphore_info_get.c
+++ b/common/src/txe_semaphore_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_info_get(TX_SEMAPHORE *semaphore_ptr, CHAR **name, ULONG *current_value,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common/src/txe_semaphore_prioritize.c b/common/src/txe_semaphore_prioritize.c
index 52525ded3..cd873c5a9 100644
--- a/common/src/txe_semaphore_prioritize.c
+++ b/common/src/txe_semaphore_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_prioritize(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/txe_semaphore_put.c b/common/src/txe_semaphore_put.c
index 4a26fbd8c..452c39bd3 100644
--- a/common/src/txe_semaphore_put.c
+++ b/common/src/txe_semaphore_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common/src/txe_semaphore_put_notify.c b/common/src/txe_semaphore_put_notify.c
index 646c293af..33aa8d9ae 100644
--- a/common/src/txe_semaphore_put_notify.c
+++ b/common/src/txe_semaphore_put_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put_notify(TX_SEMAPHORE *semaphore_ptr, VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr))
{
diff --git a/common/src/txe_thread_create.c b/common/src/txe_thread_create.c
index c3902cd15..d319bc9e2 100644
--- a/common/src/txe_thread_create.c
+++ b/common/src/txe_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,14 +78,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
VOID (*entry_function)(ULONG id), ULONG entry_input,
diff --git a/common/src/txe_thread_delete.c b/common/src/txe_thread_delete.c
index 6e2d1d2bd..85cf31cac 100644
--- a/common/src/txe_thread_delete.c
+++ b/common/src/txe_thread_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_delete(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_thread_entry_exit_notify.c b/common/src/txe_thread_entry_exit_notify.c
index ab4e835d2..334206839 100644
--- a/common/src/txe_thread_entry_exit_notify.c
+++ b/common/src/txe_thread_entry_exit_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_entry_exit_notify(TX_THREAD *thread_ptr, VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT type))
{
diff --git a/common/src/txe_thread_info_get.c b/common/src/txe_thread_info_get.c
index 17f9155db..ad1db3f7f 100644
--- a/common/src/txe_thread_info_get.c
+++ b/common/src/txe_thread_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_info_get(TX_THREAD *thread_ptr, CHAR **name, UINT *state, ULONG *run_count,
UINT *priority, UINT *preemption_threshold, ULONG *time_slice,
diff --git a/common/src/txe_thread_preemption_change.c b/common/src/txe_thread_preemption_change.c
index c0cfa91ef..e3de0a858 100644
--- a/common/src/txe_thread_preemption_change.c
+++ b/common/src/txe_thread_preemption_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_preemption_change(TX_THREAD *thread_ptr, UINT new_threshold, UINT *old_threshold)
{
diff --git a/common/src/txe_thread_priority_change.c b/common/src/txe_thread_priority_change.c
index b4a1224b5..2bf0058bd 100644
--- a/common/src/txe_thread_priority_change.c
+++ b/common/src/txe_thread_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_priority_change(TX_THREAD *thread_ptr, UINT new_priority, UINT *old_priority)
{
diff --git a/common/src/txe_thread_relinquish.c b/common/src/txe_thread_relinquish.c
index 1c5ab21a1..080bad47a 100644
--- a/common/src/txe_thread_relinquish.c
+++ b/common/src/txe_thread_relinquish.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _txe_thread_relinquish(VOID)
{
diff --git a/common/src/txe_thread_reset.c b/common/src/txe_thread_reset.c
index 4fed5e7aa..1815f5bbd 100644
--- a/common/src/txe_thread_reset.c
+++ b/common/src/txe_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_thread_resume.c b/common/src/txe_thread_resume.c
index e8a341ddf..ae356c6c1 100644
--- a/common/src/txe_thread_resume.c
+++ b/common/src/txe_thread_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_resume(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_thread_suspend.c b/common/src/txe_thread_suspend.c
index 951d35eb1..dab42db71 100644
--- a/common/src/txe_thread_suspend.c
+++ b/common/src/txe_thread_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_thread_terminate.c b/common/src/txe_thread_terminate.c
index aa54501c7..8e1f18f5c 100644
--- a/common/src/txe_thread_terminate.c
+++ b/common/src/txe_thread_terminate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_terminate(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_thread_time_slice_change.c b/common/src/txe_thread_time_slice_change.c
index d01137d83..456dbb2a6 100644
--- a/common/src/txe_thread_time_slice_change.c
+++ b/common/src/txe_thread_time_slice_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_time_slice_change(TX_THREAD *thread_ptr, ULONG new_time_slice, ULONG *old_time_slice)
{
diff --git a/common/src/txe_thread_wait_abort.c b/common/src/txe_thread_wait_abort.c
index 8132c597a..086fb33bc 100644
--- a/common/src/txe_thread_wait_abort.c
+++ b/common/src/txe_thread_wait_abort.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_wait_abort(TX_THREAD *thread_ptr)
{
diff --git a/common/src/txe_timer_activate.c b/common/src/txe_timer_activate.c
index 9bd623414..094eda851 100644
--- a/common/src/txe_timer_activate.c
+++ b/common/src/txe_timer_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_activate(TX_TIMER *timer_ptr)
{
diff --git a/common/src/txe_timer_change.c b/common/src/txe_timer_change.c
index 70a7ed0da..ef503ffa8 100644
--- a/common/src/txe_timer_change.c
+++ b/common/src/txe_timer_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
{
diff --git a/common/src/txe_timer_create.c b/common/src/txe_timer_create.c
index 553418bf2..02cf7c1aa 100644
--- a/common/src/txe_timer_create.c
+++ b/common/src/txe_timer_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr,
VOID (*expiration_function)(ULONG id), ULONG expiration_input,
diff --git a/common/src/txe_timer_deactivate.c b/common/src/txe_timer_deactivate.c
index a5736919b..d44ba67ba 100644
--- a/common/src/txe_timer_deactivate.c
+++ b/common/src/txe_timer_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_deactivate(TX_TIMER *timer_ptr)
{
diff --git a/common/src/txe_timer_delete.c b/common/src/txe_timer_delete.c
index 3a1bf33c5..e94ba4d64 100644
--- a/common/src/txe_timer_delete.c
+++ b/common/src/txe_timer_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_delete(TX_TIMER *timer_ptr)
{
diff --git a/common/src/txe_timer_info_get.c b/common/src/txe_timer_info_get.c
index a227f1374..16ac5f64a 100644
--- a/common/src/txe_timer_info_get.c
+++ b/common/src/txe_timer_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_info_get(TX_TIMER *timer_ptr, CHAR **name, UINT *active, ULONG *remaining_ticks,
ULONG *reschedule_ticks, TX_TIMER **next_timer)
diff --git a/common_modules/inc/txm_module.h b/common_modules/inc/txm_module.h
index d8c714f92..88f79d9ee 100644
--- a/common_modules/inc/txm_module.h
+++ b/common_modules/inc/txm_module.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -35,18 +36,6 @@
/* This file defines the basic module constants, interface structures, */
/* and function prototypes. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 12-31-2020 Scott Larson Modified comment(s), added */
-/* port-specific extension, */
-/* resulting in version 6.1.3 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* callback thread prototype, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TXM_MODULE_H
diff --git a/common_modules/inc/txm_module_user_sample.h b/common_modules/inc/txm_module_user_sample.h
index e480fc1d2..889e0b91c 100644
--- a/common_modules/inc/txm_module_user_sample.h
+++ b/common_modules/inc/txm_module_user_sample.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,15 +40,6 @@
/* the command line when building Modules library and application */
/* objects. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED defines, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TXM_MODULE_USER_H
diff --git a/common_modules/module_lib/src/txm_block_allocate.c b/common_modules/module_lib/src/txm_block_allocate.c
index 0a98d1b89..4ab3983f7 100644
--- a/common_modules/module_lib/src/txm_block_allocate.c
+++ b/common_modules/module_lib/src/txm_block_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_allocate(TX_BLOCK_POOL *pool_ptr, VOID **block_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_create.c b/common_modules/module_lib/src/txm_block_pool_create.c
index d4b33e2b0..90838e3b1 100644
--- a/common_modules/module_lib/src/txm_block_pool_create.c
+++ b/common_modules/module_lib/src/txm_block_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_create(TX_BLOCK_POOL *pool_ptr, CHAR *name_ptr, ULONG block_size, VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_delete.c b/common_modules/module_lib/src/txm_block_pool_delete.c
index b32f144e5..aa146b8b3 100644
--- a/common_modules/module_lib/src/txm_block_pool_delete.c
+++ b/common_modules/module_lib/src/txm_block_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_delete(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_info_get.c b/common_modules/module_lib/src/txm_block_pool_info_get.c
index ef61b698e..fa4ea6861 100644
--- a/common_modules/module_lib/src/txm_block_pool_info_get.c
+++ b/common_modules/module_lib/src/txm_block_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_info_get(TX_BLOCK_POOL *pool_ptr, CHAR **name, ULONG *available_blocks, ULONG *total_blocks, TX_THREAD **first_suspended, ULONG *suspended_count, TX_BLOCK_POOL **next_pool)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_performance_info_get.c b/common_modules/module_lib/src/txm_block_pool_performance_info_get.c
index 8df0375b8..2c2db6b16 100644
--- a/common_modules/module_lib/src/txm_block_pool_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_block_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_info_get(TX_BLOCK_POOL *pool_ptr, ULONG *allocates, ULONG *releases, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_performance_system_info_get.c b/common_modules/module_lib/src/txm_block_pool_performance_system_info_get.c
index 48c1771b2..ca395c31c 100644
--- a/common_modules/module_lib/src/txm_block_pool_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_block_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_system_info_get(ULONG *allocates, ULONG *releases, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_block_pool_prioritize.c b/common_modules/module_lib/src/txm_block_pool_prioritize.c
index 467b45744..1b3fc2b49 100644
--- a/common_modules/module_lib/src/txm_block_pool_prioritize.c
+++ b/common_modules/module_lib/src/txm_block_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_prioritize(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_modules/module_lib/src/txm_block_release.c b/common_modules/module_lib/src/txm_block_release.c
index 892257cbc..0d02f83fd 100644
--- a/common_modules/module_lib/src/txm_block_release.c
+++ b/common_modules/module_lib/src/txm_block_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_block_release(VOID *block_ptr)
{
diff --git a/common_modules/module_lib/src/txm_byte_allocate.c b/common_modules/module_lib/src/txm_byte_allocate.c
index 7ce96bd7d..acb88e9c1 100644
--- a/common_modules/module_lib/src/txm_byte_allocate.c
+++ b/common_modules/module_lib/src/txm_byte_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_allocate(TX_BYTE_POOL *pool_ptr, VOID **memory_ptr, ULONG memory_size, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_create.c b/common_modules/module_lib/src/txm_byte_pool_create.c
index d37d7aeb3..d7775e3f1 100644
--- a/common_modules/module_lib/src/txm_byte_pool_create.c
+++ b/common_modules/module_lib/src/txm_byte_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_create(TX_BYTE_POOL *pool_ptr, CHAR *name_ptr, VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_delete.c b/common_modules/module_lib/src/txm_byte_pool_delete.c
index 5cd7237bc..c7413635f 100644
--- a/common_modules/module_lib/src/txm_byte_pool_delete.c
+++ b/common_modules/module_lib/src/txm_byte_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_delete(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_info_get.c b/common_modules/module_lib/src/txm_byte_pool_info_get.c
index f2d2bb817..1ad38f489 100644
--- a/common_modules/module_lib/src/txm_byte_pool_info_get.c
+++ b/common_modules/module_lib/src/txm_byte_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_info_get(TX_BYTE_POOL *pool_ptr, CHAR **name, ULONG *available_bytes, ULONG *fragments, TX_THREAD **first_suspended, ULONG *suspended_count, TX_BYTE_POOL **next_pool)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_performance_info_get.c b/common_modules/module_lib/src/txm_byte_pool_performance_info_get.c
index d0baf6525..9c23d7496 100644
--- a/common_modules/module_lib/src/txm_byte_pool_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_byte_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,15 +70,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_info_get(TX_BYTE_POOL *pool_ptr, ULONG *allocates, ULONG *releases, ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_performance_system_info_get.c b/common_modules/module_lib/src/txm_byte_pool_performance_system_info_get.c
index 806c283a5..c9d92fa83 100644
--- a/common_modules/module_lib/src/txm_byte_pool_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_byte_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,15 +68,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_system_info_get(ULONG *allocates, ULONG *releases, ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_byte_pool_prioritize.c b/common_modules/module_lib/src/txm_byte_pool_prioritize.c
index 261679f7a..6b1a47d4d 100644
--- a/common_modules/module_lib/src/txm_byte_pool_prioritize.c
+++ b/common_modules/module_lib/src/txm_byte_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_prioritize(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_modules/module_lib/src/txm_byte_release.c b/common_modules/module_lib/src/txm_byte_release.c
index 54d57b955..aef10b3ed 100644
--- a/common_modules/module_lib/src/txm_byte_release.c
+++ b/common_modules/module_lib/src/txm_byte_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_byte_release(VOID *memory_ptr)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_create.c b/common_modules/module_lib/src/txm_event_flags_create.c
index 482cff18f..76f1fe314 100644
--- a/common_modules/module_lib/src/txm_event_flags_create.c
+++ b/common_modules/module_lib/src/txm_event_flags_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr, UINT event_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_delete.c b/common_modules/module_lib/src/txm_event_flags_delete.c
index 1b347c22f..8ddbe611a 100644
--- a/common_modules/module_lib/src/txm_event_flags_delete.c
+++ b/common_modules/module_lib/src/txm_event_flags_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_delete(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_get.c b/common_modules/module_lib/src/txm_event_flags_get.c
index e8b0e5bff..5c1e2b6f9 100644
--- a/common_modules/module_lib/src/txm_event_flags_get.c
+++ b/common_modules/module_lib/src/txm_event_flags_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG requested_flags, UINT get_option, ULONG *actual_flags_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_info_get.c b/common_modules/module_lib/src/txm_event_flags_info_get.c
index 3fac9791e..eedcce1f1 100644
--- a/common_modules/module_lib/src/txm_event_flags_info_get.c
+++ b/common_modules/module_lib/src/txm_event_flags_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR **name, ULONG *current_flags, TX_THREAD **first_suspended, ULONG *suspended_count, TX_EVENT_FLAGS_GROUP **next_group)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_performance_info_get.c b/common_modules/module_lib/src/txm_event_flags_performance_info_get.c
index febcc5a6d..1aac708cd 100644
--- a/common_modules/module_lib/src/txm_event_flags_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_event_flags_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG *sets, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_performance_system_info_get.c b/common_modules/module_lib/src/txm_event_flags_performance_system_info_get.c
index ff07989e6..bb0230ee2 100644
--- a/common_modules/module_lib/src/txm_event_flags_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_event_flags_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_system_info_get(ULONG *sets, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_set.c b/common_modules/module_lib/src/txm_event_flags_set.c
index 20999272f..6c5e155ed 100644
--- a/common_modules/module_lib/src/txm_event_flags_set.c
+++ b/common_modules/module_lib/src/txm_event_flags_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG flags_to_set, UINT set_option)
{
diff --git a/common_modules/module_lib/src/txm_event_flags_set_notify.c b/common_modules/module_lib/src/txm_event_flags_set_notify.c
index 8564c847e..84c8b6ce1 100644
--- a/common_modules/module_lib/src/txm_event_flags_set_notify.c
+++ b/common_modules/module_lib/src/txm_event_flags_set_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set_notify(TX_EVENT_FLAGS_GROUP *group_ptr, VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *))
{
diff --git a/common_modules/module_lib/src/txm_module_application_request.c b/common_modules/module_lib/src/txm_module_application_request.c
index 1c4527672..3c65c0807 100644
--- a/common_modules/module_lib/src/txm_module_application_request.c
+++ b/common_modules/module_lib/src/txm_module_application_request.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT txm_module_application_request(ULONG request, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3)
{
diff --git a/common_modules/module_lib/src/txm_module_callback_request_thread_entry.c b/common_modules/module_lib/src/txm_module_callback_request_thread_entry.c
index 16015755d..cf030f928 100644
--- a/common_modules/module_lib/src/txm_module_callback_request_thread_entry.c
+++ b/common_modules/module_lib/src/txm_module_callback_request_thread_entry.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,15 +74,6 @@ extern TXM_MODULE_THREAD_ENTRY_INFO *_txm_module_entry_info;
/* */
/* Initial thread stack frame */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _txm_module_callback_request_thread_entry(ULONG id)
{
diff --git a/common_modules/module_lib/src/txm_module_object_allocate.c b/common_modules/module_lib/src/txm_module_object_allocate.c
index 40d548fb3..2cf169d5b 100644
--- a/common_modules/module_lib/src/txm_module_object_allocate.c
+++ b/common_modules/module_lib/src/txm_module_object_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_object_allocate(VOID **object_ptr, ULONG object_size)
{
diff --git a/common_modules/module_lib/src/txm_module_object_deallocate.c b/common_modules/module_lib/src/txm_module_object_deallocate.c
index 100c4e9f0..c0ffb097f 100644
--- a/common_modules/module_lib/src/txm_module_object_deallocate.c
+++ b/common_modules/module_lib/src/txm_module_object_deallocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_object_deallocate(VOID *object_ptr)
{
diff --git a/common_modules/module_lib/src/txm_module_object_pointer_get.c b/common_modules/module_lib/src/txm_module_object_pointer_get.c
index 921d0fa97..6417457a5 100644
--- a/common_modules/module_lib/src/txm_module_object_pointer_get.c
+++ b/common_modules/module_lib/src/txm_module_object_pointer_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,15 +69,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_object_pointer_get(UINT object_type, CHAR *name, VOID **object_ptr)
{
diff --git a/common_modules/module_lib/src/txm_module_object_pointer_get_extended.c b/common_modules/module_lib/src/txm_module_object_pointer_get_extended.c
index 87d986aa6..b820cf1d7 100644
--- a/common_modules/module_lib/src/txm_module_object_pointer_get_extended.c
+++ b/common_modules/module_lib/src/txm_module_object_pointer_get_extended.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,15 +72,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_object_pointer_get_extended(UINT object_type, CHAR *name, UINT name_length, VOID **object_ptr)
{
diff --git a/common_modules/module_lib/src/txm_module_thread_system_suspend.c b/common_modules/module_lib/src/txm_module_thread_system_suspend.c
index 461290744..ad8e8ea78 100644
--- a/common_modules/module_lib/src/txm_module_thread_system_suspend.c
+++ b/common_modules/module_lib/src/txm_module_thread_system_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,15 +61,6 @@
/* _tx_thread_terminate Thread terminate */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_thread_system_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_mutex_create.c b/common_modules/module_lib/src/txm_mutex_create.c
index 19e8d03b0..f50fd52f2 100644
--- a/common_modules/module_lib/src/txm_mutex_create.c
+++ b/common_modules/module_lib/src/txm_mutex_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_create(TX_MUTEX *mutex_ptr, CHAR *name_ptr, UINT inherit, UINT mutex_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_mutex_delete.c b/common_modules/module_lib/src/txm_mutex_delete.c
index 9989ac8a5..c487744ef 100644
--- a/common_modules/module_lib/src/txm_mutex_delete.c
+++ b/common_modules/module_lib/src/txm_mutex_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_delete(TX_MUTEX *mutex_ptr)
{
diff --git a/common_modules/module_lib/src/txm_mutex_get.c b/common_modules/module_lib/src/txm_mutex_get.c
index 88da1ca33..fb6191e25 100644
--- a/common_modules/module_lib/src/txm_mutex_get.c
+++ b/common_modules/module_lib/src/txm_mutex_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_get(TX_MUTEX *mutex_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_mutex_info_get.c b/common_modules/module_lib/src/txm_mutex_info_get.c
index 981b79599..8e63c779b 100644
--- a/common_modules/module_lib/src/txm_mutex_info_get.c
+++ b/common_modules/module_lib/src/txm_mutex_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_info_get(TX_MUTEX *mutex_ptr, CHAR **name, ULONG *count, TX_THREAD **owner, TX_THREAD **first_suspended, ULONG *suspended_count, TX_MUTEX **next_mutex)
{
diff --git a/common_modules/module_lib/src/txm_mutex_performance_info_get.c b/common_modules/module_lib/src/txm_mutex_performance_info_get.c
index 26bbde81f..95e1045b9 100644
--- a/common_modules/module_lib/src/txm_mutex_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_mutex_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,15 +66,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_info_get(TX_MUTEX *mutex_ptr, ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
{
diff --git a/common_modules/module_lib/src/txm_mutex_performance_system_info_get.c b/common_modules/module_lib/src/txm_mutex_performance_system_info_get.c
index 29906c9f1..1c899abd3 100644
--- a/common_modules/module_lib/src/txm_mutex_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_mutex_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
{
diff --git a/common_modules/module_lib/src/txm_mutex_prioritize.c b/common_modules/module_lib/src/txm_mutex_prioritize.c
index e0b596ecd..32223b5fc 100644
--- a/common_modules/module_lib/src/txm_mutex_prioritize.c
+++ b/common_modules/module_lib/src/txm_mutex_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_prioritize(TX_MUTEX *mutex_ptr)
{
diff --git a/common_modules/module_lib/src/txm_mutex_put.c b/common_modules/module_lib/src/txm_mutex_put.c
index fc19b69b7..d0e03d020 100644
--- a/common_modules/module_lib/src/txm_mutex_put.c
+++ b/common_modules/module_lib/src/txm_mutex_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_mutex_put(TX_MUTEX *mutex_ptr)
{
diff --git a/common_modules/module_lib/src/txm_queue_create.c b/common_modules/module_lib/src/txm_queue_create.c
index 890abc43b..a18b9f85d 100644
--- a/common_modules/module_lib/src/txm_queue_create.c
+++ b/common_modules/module_lib/src/txm_queue_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,15 +61,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_create(TX_QUEUE *queue_ptr, CHAR *name_ptr, UINT message_size, VOID *queue_start, ULONG queue_size, UINT queue_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_queue_delete.c b/common_modules/module_lib/src/txm_queue_delete.c
index 36377bfc6..f39ddb995 100644
--- a/common_modules/module_lib/src/txm_queue_delete.c
+++ b/common_modules/module_lib/src/txm_queue_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_delete(TX_QUEUE *queue_ptr)
{
diff --git a/common_modules/module_lib/src/txm_queue_flush.c b/common_modules/module_lib/src/txm_queue_flush.c
index 26a1c20dd..5f33c1118 100644
--- a/common_modules/module_lib/src/txm_queue_flush.c
+++ b/common_modules/module_lib/src/txm_queue_flush.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_flush(TX_QUEUE *queue_ptr)
{
diff --git a/common_modules/module_lib/src/txm_queue_front_send.c b/common_modules/module_lib/src/txm_queue_front_send.c
index 09532f80f..64555e83d 100644
--- a/common_modules/module_lib/src/txm_queue_front_send.c
+++ b/common_modules/module_lib/src/txm_queue_front_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_front_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_queue_info_get.c b/common_modules/module_lib/src/txm_queue_info_get.c
index 67e814ea3..c66a3d7e0 100644
--- a/common_modules/module_lib/src/txm_queue_info_get.c
+++ b/common_modules/module_lib/src/txm_queue_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_info_get(TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage, TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue)
{
diff --git a/common_modules/module_lib/src/txm_queue_performance_info_get.c b/common_modules/module_lib/src/txm_queue_performance_info_get.c
index 6eb656424..a7c77eeea 100644
--- a/common_modules/module_lib/src/txm_queue_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_queue_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_info_get(TX_QUEUE *queue_ptr, ULONG *messages_sent, ULONG *messages_received, ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_queue_performance_system_info_get.c b/common_modules/module_lib/src/txm_queue_performance_system_info_get.c
index 78bd22dd8..9a09fd5ac 100644
--- a/common_modules/module_lib/src/txm_queue_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_queue_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_system_info_get(ULONG *messages_sent, ULONG *messages_received, ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_queue_prioritize.c b/common_modules/module_lib/src/txm_queue_prioritize.c
index cc6badb76..417ad17a0 100644
--- a/common_modules/module_lib/src/txm_queue_prioritize.c
+++ b/common_modules/module_lib/src/txm_queue_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_prioritize(TX_QUEUE *queue_ptr)
{
diff --git a/common_modules/module_lib/src/txm_queue_receive.c b/common_modules/module_lib/src/txm_queue_receive.c
index c78391279..07a9c8f3b 100644
--- a/common_modules/module_lib/src/txm_queue_receive.c
+++ b/common_modules/module_lib/src/txm_queue_receive.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_queue_send.c b/common_modules/module_lib/src/txm_queue_send.c
index 0c5304b2f..0fd522b21 100644
--- a/common_modules/module_lib/src/txm_queue_send.c
+++ b/common_modules/module_lib/src/txm_queue_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_queue_send_notify.c b/common_modules/module_lib/src/txm_queue_send_notify.c
index 5b8e782e1..dab5d5b02 100644
--- a/common_modules/module_lib/src/txm_queue_send_notify.c
+++ b/common_modules/module_lib/src/txm_queue_send_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_queue_send_notify(TX_QUEUE *queue_ptr, VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr))
{
diff --git a/common_modules/module_lib/src/txm_semaphore_ceiling_put.c b/common_modules/module_lib/src/txm_semaphore_ceiling_put.c
index 55765072f..10d760907 100644
--- a/common_modules/module_lib/src/txm_semaphore_ceiling_put.c
+++ b/common_modules/module_lib/src/txm_semaphore_ceiling_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_ceiling_put(TX_SEMAPHORE *semaphore_ptr, ULONG ceiling)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_create.c b/common_modules/module_lib/src/txm_semaphore_create.c
index 671892cb0..229b46cd8 100644
--- a/common_modules/module_lib/src/txm_semaphore_create.c
+++ b/common_modules/module_lib/src/txm_semaphore_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_create(TX_SEMAPHORE *semaphore_ptr, CHAR *name_ptr, ULONG initial_count, UINT semaphore_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_delete.c b/common_modules/module_lib/src/txm_semaphore_delete.c
index 0229bf699..08dfebbff 100644
--- a/common_modules/module_lib/src/txm_semaphore_delete.c
+++ b/common_modules/module_lib/src/txm_semaphore_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_delete(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_get.c b/common_modules/module_lib/src/txm_semaphore_get.c
index 2ab634dee..9745da0bc 100644
--- a/common_modules/module_lib/src/txm_semaphore_get.c
+++ b/common_modules/module_lib/src/txm_semaphore_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_get(TX_SEMAPHORE *semaphore_ptr, ULONG wait_option)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_info_get.c b/common_modules/module_lib/src/txm_semaphore_info_get.c
index 0627fe7cf..2bdfa2c00 100644
--- a/common_modules/module_lib/src/txm_semaphore_info_get.c
+++ b/common_modules/module_lib/src/txm_semaphore_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,15 +63,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_info_get(TX_SEMAPHORE *semaphore_ptr, CHAR **name, ULONG *current_value, TX_THREAD **first_suspended, ULONG *suspended_count, TX_SEMAPHORE **next_semaphore)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_performance_info_get.c b/common_modules/module_lib/src/txm_semaphore_performance_info_get.c
index 1c09d2f1b..13204bc99 100644
--- a/common_modules/module_lib/src/txm_semaphore_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_semaphore_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_info_get(TX_SEMAPHORE *semaphore_ptr, ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_performance_system_info_get.c b/common_modules/module_lib/src/txm_semaphore_performance_system_info_get.c
index 9a50edb9d..7d196030b 100644
--- a/common_modules/module_lib/src/txm_semaphore_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_semaphore_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_prioritize.c b/common_modules/module_lib/src/txm_semaphore_prioritize.c
index 02cd2a9fa..2a72de20f 100644
--- a/common_modules/module_lib/src/txm_semaphore_prioritize.c
+++ b/common_modules/module_lib/src/txm_semaphore_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_prioritize(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_put.c b/common_modules/module_lib/src/txm_semaphore_put.c
index 2ea4c04e9..0e0831b3a 100644
--- a/common_modules/module_lib/src/txm_semaphore_put.c
+++ b/common_modules/module_lib/src/txm_semaphore_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_modules/module_lib/src/txm_semaphore_put_notify.c b/common_modules/module_lib/src/txm_semaphore_put_notify.c
index db7dea85e..05c916fd4 100644
--- a/common_modules/module_lib/src/txm_semaphore_put_notify.c
+++ b/common_modules/module_lib/src/txm_semaphore_put_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put_notify(TX_SEMAPHORE *semaphore_ptr, VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr))
{
diff --git a/common_modules/module_lib/src/txm_thread_create.c b/common_modules/module_lib/src/txm_thread_create.c
index 626183145..8b1bc3677 100644
--- a/common_modules/module_lib/src/txm_thread_create.c
+++ b/common_modules/module_lib/src/txm_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,15 +69,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr, VOID (*entry_function)(ULONG entry_input), ULONG entry_input, VOID *stack_start, ULONG stack_size, UINT priority, UINT preempt_threshold, ULONG time_slice, UINT auto_start, UINT thread_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_thread_delete.c b/common_modules/module_lib/src/txm_thread_delete.c
index 641c220de..11a1bbd67 100644
--- a/common_modules/module_lib/src/txm_thread_delete.c
+++ b/common_modules/module_lib/src/txm_thread_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_delete(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_thread_entry_exit_notify.c b/common_modules/module_lib/src/txm_thread_entry_exit_notify.c
index 907840d62..db393071f 100644
--- a/common_modules/module_lib/src/txm_thread_entry_exit_notify.c
+++ b/common_modules/module_lib/src/txm_thread_entry_exit_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_entry_exit_notify(TX_THREAD *thread_ptr, VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT type))
{
diff --git a/common_modules/module_lib/src/txm_thread_identify.c b/common_modules/module_lib/src/txm_thread_identify.c
index d18aaec16..6f83cb80d 100644
--- a/common_modules/module_lib/src/txm_thread_identify.c
+++ b/common_modules/module_lib/src/txm_thread_identify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
TX_THREAD *_tx_thread_identify(VOID)
{
diff --git a/common_modules/module_lib/src/txm_thread_info_get.c b/common_modules/module_lib/src/txm_thread_info_get.c
index 6e2b921ca..d956c0319 100644
--- a/common_modules/module_lib/src/txm_thread_info_get.c
+++ b/common_modules/module_lib/src/txm_thread_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,15 +66,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_info_get(TX_THREAD *thread_ptr, CHAR **name, UINT *state, ULONG *run_count, UINT *priority, UINT *preemption_threshold, ULONG *time_slice, TX_THREAD **next_thread, TX_THREAD **next_suspended_thread)
{
diff --git a/common_modules/module_lib/src/txm_thread_interrupt_control.c b/common_modules/module_lib/src/txm_thread_interrupt_control.c
index 915b56b9a..7a4cf51f6 100644
--- a/common_modules/module_lib/src/txm_thread_interrupt_control.c
+++ b/common_modules/module_lib/src/txm_thread_interrupt_control.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_thread_interrupt_control(UINT new_posture)
{
diff --git a/common_modules/module_lib/src/txm_thread_performance_info_get.c b/common_modules/module_lib/src/txm_thread_performance_info_get.c
index 362c50e63..c6ab325bc 100644
--- a/common_modules/module_lib/src/txm_thread_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_thread_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,15 +79,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_info_get(TX_THREAD *thread_ptr, ULONG *resumptions, ULONG *suspensions, ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions, ULONG *time_slices, ULONG *relinquishes, ULONG *timeouts, ULONG *wait_aborts, TX_THREAD **last_preempted_by)
{
diff --git a/common_modules/module_lib/src/txm_thread_performance_system_info_get.c b/common_modules/module_lib/src/txm_thread_performance_system_info_get.c
index 3bafa024d..efe498685 100644
--- a/common_modules/module_lib/src/txm_thread_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_thread_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,15 +79,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_system_info_get(ULONG *resumptions, ULONG *suspensions, ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions, ULONG *time_slices, ULONG *relinquishes, ULONG *timeouts, ULONG *wait_aborts, ULONG *non_idle_returns, ULONG *idle_returns)
{
diff --git a/common_modules/module_lib/src/txm_thread_preemption_change.c b/common_modules/module_lib/src/txm_thread_preemption_change.c
index 617b99d1d..8c956942c 100644
--- a/common_modules/module_lib/src/txm_thread_preemption_change.c
+++ b/common_modules/module_lib/src/txm_thread_preemption_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_preemption_change(TX_THREAD *thread_ptr, UINT new_threshold, UINT *old_threshold)
{
diff --git a/common_modules/module_lib/src/txm_thread_priority_change.c b/common_modules/module_lib/src/txm_thread_priority_change.c
index 821937496..a31ad09fc 100644
--- a/common_modules/module_lib/src/txm_thread_priority_change.c
+++ b/common_modules/module_lib/src/txm_thread_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_priority_change(TX_THREAD *thread_ptr, UINT new_priority, UINT *old_priority)
{
diff --git a/common_modules/module_lib/src/txm_thread_relinquish.c b/common_modules/module_lib/src/txm_thread_relinquish.c
index c8cf6b3e9..347ab163b 100644
--- a/common_modules/module_lib/src/txm_thread_relinquish.c
+++ b/common_modules/module_lib/src/txm_thread_relinquish.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _txe_thread_relinquish(VOID)
{
diff --git a/common_modules/module_lib/src/txm_thread_reset.c b/common_modules/module_lib/src/txm_thread_reset.c
index f53506dd0..b3c002902 100644
--- a/common_modules/module_lib/src/txm_thread_reset.c
+++ b/common_modules/module_lib/src/txm_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_thread_resume.c b/common_modules/module_lib/src/txm_thread_resume.c
index a6023a62a..a02100bc7 100644
--- a/common_modules/module_lib/src/txm_thread_resume.c
+++ b/common_modules/module_lib/src/txm_thread_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_resume(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_thread_sleep.c b/common_modules/module_lib/src/txm_thread_sleep.c
index 8dccdab53..d5639af2b 100644
--- a/common_modules/module_lib/src/txm_thread_sleep.c
+++ b/common_modules/module_lib/src/txm_thread_sleep.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_thread_sleep(ULONG timer_ticks)
{
diff --git a/common_modules/module_lib/src/txm_thread_stack_error_notify.c b/common_modules/module_lib/src/txm_thread_stack_error_notify.c
index 67fd4c79b..eafb4b500 100644
--- a/common_modules/module_lib/src/txm_thread_stack_error_notify.c
+++ b/common_modules/module_lib/src/txm_thread_stack_error_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_thread_stack_error_notify(VOID (*stack_error_handler)(TX_THREAD *thread_ptr))
{
diff --git a/common_modules/module_lib/src/txm_thread_suspend.c b/common_modules/module_lib/src/txm_thread_suspend.c
index e0f6ab218..69a31b314 100644
--- a/common_modules/module_lib/src/txm_thread_suspend.c
+++ b/common_modules/module_lib/src/txm_thread_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_thread_terminate.c b/common_modules/module_lib/src/txm_thread_terminate.c
index 37b3fc923..65eb13ab0 100644
--- a/common_modules/module_lib/src/txm_thread_terminate.c
+++ b/common_modules/module_lib/src/txm_thread_terminate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_terminate(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_thread_time_slice_change.c b/common_modules/module_lib/src/txm_thread_time_slice_change.c
index 581b13a94..bb7cc4eb6 100644
--- a/common_modules/module_lib/src/txm_thread_time_slice_change.c
+++ b/common_modules/module_lib/src/txm_thread_time_slice_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_time_slice_change(TX_THREAD *thread_ptr, ULONG new_time_slice, ULONG *old_time_slice)
{
diff --git a/common_modules/module_lib/src/txm_thread_wait_abort.c b/common_modules/module_lib/src/txm_thread_wait_abort.c
index fdf62e4c8..e827946b2 100644
--- a/common_modules/module_lib/src/txm_thread_wait_abort.c
+++ b/common_modules/module_lib/src/txm_thread_wait_abort.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_thread_wait_abort(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_lib/src/txm_time_get.c b/common_modules/module_lib/src/txm_time_get.c
index f31570c6e..fd73e4bc9 100644
--- a/common_modules/module_lib/src/txm_time_get.c
+++ b/common_modules/module_lib/src/txm_time_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
ULONG _tx_time_get(VOID)
{
diff --git a/common_modules/module_lib/src/txm_time_set.c b/common_modules/module_lib/src/txm_time_set.c
index 87030665b..8e36663d5 100644
--- a/common_modules/module_lib/src/txm_time_set.c
+++ b/common_modules/module_lib/src/txm_time_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_time_set(ULONG new_time)
{
diff --git a/common_modules/module_lib/src/txm_timer_activate.c b/common_modules/module_lib/src/txm_timer_activate.c
index 87bd6c9ca..357be63e4 100644
--- a/common_modules/module_lib/src/txm_timer_activate.c
+++ b/common_modules/module_lib/src/txm_timer_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_activate(TX_TIMER *timer_ptr)
{
diff --git a/common_modules/module_lib/src/txm_timer_change.c b/common_modules/module_lib/src/txm_timer_change.c
index 3e694d4b2..85bdff876 100644
--- a/common_modules/module_lib/src/txm_timer_change.c
+++ b/common_modules/module_lib/src/txm_timer_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
{
diff --git a/common_modules/module_lib/src/txm_timer_create.c b/common_modules/module_lib/src/txm_timer_create.c
index eca01d045..d65989ebd 100644
--- a/common_modules/module_lib/src/txm_timer_create.c
+++ b/common_modules/module_lib/src/txm_timer_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,15 +64,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr, VOID (*expiration_function)(ULONG), ULONG expiration_input, ULONG initial_ticks, ULONG reschedule_ticks, UINT auto_activate, UINT timer_control_block_size)
{
diff --git a/common_modules/module_lib/src/txm_timer_deactivate.c b/common_modules/module_lib/src/txm_timer_deactivate.c
index 532dfe9d7..5420ba5c6 100644
--- a/common_modules/module_lib/src/txm_timer_deactivate.c
+++ b/common_modules/module_lib/src/txm_timer_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_deactivate(TX_TIMER *timer_ptr)
{
diff --git a/common_modules/module_lib/src/txm_timer_delete.c b/common_modules/module_lib/src/txm_timer_delete.c
index 3a3162784..a8b116a8e 100644
--- a/common_modules/module_lib/src/txm_timer_delete.c
+++ b/common_modules/module_lib/src/txm_timer_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_delete(TX_TIMER *timer_ptr)
{
diff --git a/common_modules/module_lib/src/txm_timer_info_get.c b/common_modules/module_lib/src/txm_timer_info_get.c
index 767012abd..f918ca67b 100644
--- a/common_modules/module_lib/src/txm_timer_info_get.c
+++ b/common_modules/module_lib/src/txm_timer_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txe_timer_info_get(TX_TIMER *timer_ptr, CHAR **name, UINT *active, ULONG *remaining_ticks, ULONG *reschedule_ticks, TX_TIMER **next_timer)
{
diff --git a/common_modules/module_lib/src/txm_timer_performance_info_get.c b/common_modules/module_lib/src/txm_timer_performance_info_get.c
index 620dbb9f2..9e9c1ea4e 100644
--- a/common_modules/module_lib/src/txm_timer_performance_info_get.c
+++ b/common_modules/module_lib/src/txm_timer_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,15 +65,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_info_get(TX_TIMER *timer_ptr, ULONG *activates, ULONG *reactivates, ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
{
diff --git a/common_modules/module_lib/src/txm_timer_performance_system_info_get.c b/common_modules/module_lib/src/txm_timer_performance_system_info_get.c
index 02b98518d..202ad1ad5 100644
--- a/common_modules/module_lib/src/txm_timer_performance_system_info_get.c
+++ b/common_modules/module_lib/src/txm_timer_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_system_info_get(ULONG *activates, ULONG *reactivates, ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
{
diff --git a/common_modules/module_lib/src/txm_trace_buffer_full_notify.c b/common_modules/module_lib/src/txm_trace_buffer_full_notify.c
index 3e46bfe48..3494b7413 100644
--- a/common_modules/module_lib/src/txm_trace_buffer_full_notify.c
+++ b/common_modules/module_lib/src/txm_trace_buffer_full_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_buffer_full_notify(VOID (*full_buffer_callback)(VOID *buffer))
{
diff --git a/common_modules/module_lib/src/txm_trace_disable.c b/common_modules/module_lib/src/txm_trace_disable.c
index 569db575b..9861533b3 100644
--- a/common_modules/module_lib/src/txm_trace_disable.c
+++ b/common_modules/module_lib/src/txm_trace_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,15 +53,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_disable(VOID)
{
diff --git a/common_modules/module_lib/src/txm_trace_enable.c b/common_modules/module_lib/src/txm_trace_enable.c
index fd3532e37..3355520eb 100644
--- a/common_modules/module_lib/src/txm_trace_enable.c
+++ b/common_modules/module_lib/src/txm_trace_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_enable(VOID *trace_buffer_start, ULONG trace_buffer_size, ULONG registry_entries)
{
diff --git a/common_modules/module_lib/src/txm_trace_event_filter.c b/common_modules/module_lib/src/txm_trace_event_filter.c
index 526fd690b..1eeb9d4bb 100644
--- a/common_modules/module_lib/src/txm_trace_event_filter.c
+++ b/common_modules/module_lib/src/txm_trace_event_filter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_filter(ULONG event_filter_bits)
{
diff --git a/common_modules/module_lib/src/txm_trace_event_unfilter.c b/common_modules/module_lib/src/txm_trace_event_unfilter.c
index e5ca5d692..66ec727e3 100644
--- a/common_modules/module_lib/src/txm_trace_event_unfilter.c
+++ b/common_modules/module_lib/src/txm_trace_event_unfilter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_unfilter(ULONG event_unfilter_bits)
{
diff --git a/common_modules/module_lib/src/txm_trace_interrupt_control.c b/common_modules/module_lib/src/txm_trace_interrupt_control.c
index a26651f56..4bd9028cf 100644
--- a/common_modules/module_lib/src/txm_trace_interrupt_control.c
+++ b/common_modules/module_lib/src/txm_trace_interrupt_control.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_interrupt_control(UINT new_posture)
{
diff --git a/common_modules/module_lib/src/txm_trace_isr_enter_insert.c b/common_modules/module_lib/src/txm_trace_isr_enter_insert.c
index 9411443ba..19a8ad189 100644
--- a/common_modules/module_lib/src/txm_trace_isr_enter_insert.c
+++ b/common_modules/module_lib/src/txm_trace_isr_enter_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_enter_insert(ULONG isr_id)
{
diff --git a/common_modules/module_lib/src/txm_trace_isr_exit_insert.c b/common_modules/module_lib/src/txm_trace_isr_exit_insert.c
index b686cb7c7..3b60c0fbb 100644
--- a/common_modules/module_lib/src/txm_trace_isr_exit_insert.c
+++ b/common_modules/module_lib/src/txm_trace_isr_exit_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,15 +54,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_exit_insert(ULONG isr_id)
{
diff --git a/common_modules/module_lib/src/txm_trace_user_event_insert.c b/common_modules/module_lib/src/txm_trace_user_event_insert.c
index c3d0e0cb0..dfe7dd232 100644
--- a/common_modules/module_lib/src/txm_trace_user_event_insert.c
+++ b/common_modules/module_lib/src/txm_trace_user_event_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* Module application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _tx_trace_user_event_insert(ULONG event_id, ULONG info_field_1, ULONG info_field_2, ULONG info_field_3, ULONG info_field_4)
{
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 0ac2210d3..03bd86ebf 100644
--- a/common_modules/module_manager/inc/txm_module_manager_dispatch.h
+++ b/common_modules/module_manager/inc/txm_module_manager_dispatch.h
@@ -1,11 +1,11 @@
/***************************************************************************
* 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
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -2393,7 +2393,7 @@ 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)
{
@@ -2427,7 +2427,7 @@ 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)
{
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 2dc49f771..45c7f4098 100644
--- a/common_modules/module_manager/inc/txm_module_manager_util.h
+++ b/common_modules/module_manager/inc/txm_module_manager_util.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -35,22 +36,6 @@
/* This file declares prototypes of utility functions used by the */
/* module manager. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s) and */
-/* optimized object checks, */
-/* resulting in version 6.1.6 */
-/* 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 */
-/* */
/**************************************************************************/
#ifndef TXM_MODULE_MANAGER_UTIL_H
diff --git a/common_modules/module_manager/src/txm_module_manager_absolute_load.c b/common_modules/module_manager/src/txm_module_manager_absolute_load.c
index d8a771f80..dee6efd22 100644
--- a/common_modules/module_manager/src/txm_module_manager_absolute_load.c
+++ b/common_modules/module_manager/src/txm_module_manager_absolute_load.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 12-31-2020 Andres Mlinar Initial Version 6.1.3 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_absolute_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, VOID *module_location)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_application_request.c b/common_modules/module_manager/src/txm_module_manager_application_request.c
index 4682968a7..111dbbdc0 100644
--- a/common_modules/module_manager/src/txm_module_manager_application_request.c
+++ b/common_modules/module_manager/src/txm_module_manager_application_request.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,15 +62,6 @@
/* */
/* _txm_module_manager_kernel_dispatch Kernel dispatch function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_application_request(ULONG request_id, ALIGN_TYPE param_1, ALIGN_TYPE param_2, ALIGN_TYPE param_3)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_callback_request.c b/common_modules/module_manager/src/txm_module_manager_callback_request.c
index 4d5211d6f..bae5c00bc 100644
--- a/common_modules/module_manager/src/txm_module_manager_callback_request.c
+++ b/common_modules/module_manager/src/txm_module_manager_callback_request.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,12 +60,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_callback_request(TX_QUEUE *module_callback_queue, TXM_MODULE_CALLBACK_MESSAGE *callback_message)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_event_flags_notify_trampoline.c b/common_modules/module_manager/src/txm_module_manager_event_flags_notify_trampoline.c
index 44dd18725..7510f36b8 100644
--- a/common_modules/module_manager/src/txm_module_manager_event_flags_notify_trampoline.c
+++ b/common_modules/module_manager/src/txm_module_manager_event_flags_notify_trampoline.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,12 +61,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_event_flags_notify_trampoline(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_file_load.c b/common_modules/module_manager/src/txm_module_manager_file_load.c
index 55ac57a2b..c444c5c12 100644
--- a/common_modules/module_manager/src/txm_module_manager_file_load.c
+++ b/common_modules/module_manager/src/txm_module_manager_file_load.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -75,12 +76,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_file_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, FX_MEDIA *media_ptr, CHAR *file_name)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_in_place_load.c b/common_modules/module_manager/src/txm_module_manager_in_place_load.c
index acc5828c1..781ef628c 100644
--- a/common_modules/module_manager/src/txm_module_manager_in_place_load.c
+++ b/common_modules/module_manager/src/txm_module_manager_in_place_load.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,12 +66,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_in_place_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, VOID *module_location)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_initialize.c b/common_modules/module_manager/src/txm_module_manager_initialize.c
index fba853f5d..7626c19bb 100644
--- a/common_modules/module_manager/src/txm_module_manager_initialize.c
+++ b/common_modules/module_manager/src/txm_module_manager_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -129,12 +130,6 @@ ULONG _txm_module_manager_callback_error_count;
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_initialize(VOID *module_memory_start, ULONG module_memory_size)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_internal_load.c b/common_modules/module_manager/src/txm_module_manager_internal_load.c
index 46416127e..49d573544 100644
--- a/common_modules/module_manager/src/txm_module_manager_internal_load.c
+++ b/common_modules/module_manager/src/txm_module_manager_internal_load.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,12 +69,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_internal_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, VOID *module_location,
ULONG code_size, VOID *code_allocation_ptr, ULONG code_allocation_size)
diff --git a/common_modules/module_manager/src/txm_module_manager_kernel_dispatch.c b/common_modules/module_manager/src/txm_module_manager_kernel_dispatch.c
index 769ebcc52..aa377430d 100644
--- a/common_modules/module_manager/src/txm_module_manager_kernel_dispatch.c
+++ b/common_modules/module_manager/src/txm_module_manager_kernel_dispatch.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -76,22 +77,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 12-31-2020 Scott Larson Modified comment(s), added */
-/* port-specific dispatch, */
-/* resulting in version 6.1.3 */
-/* 04-02-2021 Scott Larson Modified comment(s), */
-/* added optional defines to */
-/* remove unneeded functions, */
-/* resulting in version 6.1.6 */
-/* 01-31-2022 Scott Larson Modified comments and added */
-/* CALL_NOT_USED option, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
ALIGN_TYPE _txm_module_manager_kernel_dispatch(ULONG kernel_request, ALIGN_TYPE param_0, ALIGN_TYPE param_1, ALIGN_TYPE param_2)
{
@@ -439,7 +424,7 @@ TXM_MODULE_INSTANCE *module_instance;
break;
}
#endif
-
+
#ifndef TXM_QUEUE_SEND_CALL_NOT_USED
case TXM_QUEUE_SEND_CALL:
{
diff --git a/common_modules/module_manager/src/txm_module_manager_maximum_module_priority_set.c b/common_modules/module_manager/src/txm_module_manager_maximum_module_priority_set.c
index a3b31c8e2..35560eea1 100644
--- a/common_modules/module_manager/src/txm_module_manager_maximum_module_priority_set.c
+++ b/common_modules/module_manager/src/txm_module_manager_maximum_module_priority_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,12 +59,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_maximum_module_priority_set(TXM_MODULE_INSTANCE *module_instance, UINT priority)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_memory_load.c b/common_modules/module_manager/src/txm_module_manager_memory_load.c
index 88679544d..e615e4f2d 100644
--- a/common_modules/module_manager/src/txm_module_manager_memory_load.c
+++ b/common_modules/module_manager/src/txm_module_manager_memory_load.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_memory_load(TXM_MODULE_INSTANCE *module_instance, CHAR *module_name, VOID *module_location)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_object_allocate.c b/common_modules/module_manager/src/txm_module_manager_object_allocate.c
index 49a6485e8..92ae128c2 100644
--- a/common_modules/module_manager/src/txm_module_manager_object_allocate.c
+++ b/common_modules/module_manager/src/txm_module_manager_object_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_allocate(VOID **object_ptr_ptr, ULONG object_size, TXM_MODULE_INSTANCE *module_instance)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_object_deallocate.c b/common_modules/module_manager/src/txm_module_manager_object_deallocate.c
index b5deeb6b6..2efc465b7 100644
--- a/common_modules/module_manager/src/txm_module_manager_object_deallocate.c
+++ b/common_modules/module_manager/src/txm_module_manager_object_deallocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,12 +59,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_deallocate(VOID *object_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_object_pointer_get.c b/common_modules/module_manager/src/txm_module_manager_object_pointer_get.c
index 198e8c70e..84cf6c96e 100644
--- a/common_modules/module_manager/src/txm_module_manager_object_pointer_get.c
+++ b/common_modules/module_manager/src/txm_module_manager_object_pointer_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,12 +72,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_pointer_get(UINT object_type, CHAR *name, VOID **object_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_object_pointer_get_extended.c b/common_modules/module_manager/src/txm_module_manager_object_pointer_get_extended.c
index 017ed364c..1ddd987b3 100644
--- a/common_modules/module_manager/src/txm_module_manager_object_pointer_get_extended.c
+++ b/common_modules/module_manager/src/txm_module_manager_object_pointer_get_extended.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -88,12 +89,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_pointer_get_extended(UINT object_type, CHAR *search_name, UINT search_name_length, VOID **object_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_object_pool_create.c b/common_modules/module_manager/src/txm_module_manager_object_pool_create.c
index b9038a811..ad05aa957 100644
--- a/common_modules/module_manager/src/txm_module_manager_object_pool_create.c
+++ b/common_modules/module_manager/src/txm_module_manager_object_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,12 +60,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_pool_create(VOID *object_memory, ULONG object_memory_size)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_properties_get.c b/common_modules/module_manager/src/txm_module_manager_properties_get.c
index bab824fc7..3705583ff 100644
--- a/common_modules/module_manager/src/txm_module_manager_properties_get.c
+++ b/common_modules/module_manager/src/txm_module_manager_properties_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,12 +56,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_properties_get(TXM_MODULE_INSTANCE *module_instance, ULONG *module_properties_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_queue_notify_trampoline.c b/common_modules/module_manager/src/txm_module_manager_queue_notify_trampoline.c
index 94cb62e88..a6ffa56c3 100644
--- a/common_modules/module_manager/src/txm_module_manager_queue_notify_trampoline.c
+++ b/common_modules/module_manager/src/txm_module_manager_queue_notify_trampoline.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,12 +58,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_queue_notify_trampoline(TX_QUEUE *queue_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_semaphore_notify_trampoline.c b/common_modules/module_manager/src/txm_module_manager_semaphore_notify_trampoline.c
index f070c26d8..f1545cf6d 100644
--- a/common_modules/module_manager/src/txm_module_manager_semaphore_notify_trampoline.c
+++ b/common_modules/module_manager/src/txm_module_manager_semaphore_notify_trampoline.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,12 +59,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_semaphore_notify_trampoline(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_start.c b/common_modules/module_manager/src/txm_module_manager_start.c
index 4e2383bfb..afad039f8 100644
--- a/common_modules/module_manager/src/txm_module_manager_start.c
+++ b/common_modules/module_manager/src/txm_module_manager_start.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 12-31-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.3 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_start(TXM_MODULE_INSTANCE *module_instance)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_stop.c b/common_modules/module_manager/src/txm_module_manager_stop.c
index c960dae1e..69ab949b4 100644
--- a/common_modules/module_manager/src/txm_module_manager_stop.c
+++ b/common_modules/module_manager/src/txm_module_manager_stop.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -107,17 +108,6 @@ extern UINT _txm_module_manager_usbx_stop(TXM_MODULE_INSTANCE *module_instance)
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comments, fix */
-/* object delete underflow, */
-/* resulting in version 6.1.5 */
-/* 03-08-2023 Scott Larson Added tx_trace.h include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_stop(TXM_MODULE_INSTANCE *module_instance)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_thread_create.c b/common_modules/module_manager/src/txm_module_manager_thread_create.c
index d759a064a..c14d8e4e4 100644
--- a/common_modules/module_manager/src/txm_module_manager_thread_create.c
+++ b/common_modules/module_manager/src/txm_module_manager_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -80,26 +81,6 @@
/* _txm_module_manager_stop Initiate module's stop thread */
/* _txm_module_manager_kernel_dispatch Kernel dispatch function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 12-31-2020 Scott Larson Modified comment(s), */
-/* fix stack overlap checking, */
-/* added 64-bit support, */
-/* added SMP support, */
-/* resulting in version 6.1.3 */
-/* 03-08-2023 Scott Larson Check module stack for */
-/* overlap, */
-/* resulting in version 6.2.1 */
-/* 10-31-2023 Xiuwen Cai, Yajun xia Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* fixed the kernel stack */
-/* allocation issue, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
VOID (*shell_function)(TX_THREAD *, TXM_MODULE_INSTANCE *),
diff --git a/common_modules/module_manager/src/txm_module_manager_thread_notify_trampoline.c b/common_modules/module_manager/src/txm_module_manager_thread_notify_trampoline.c
index 01ff12609..b7f2d5521 100644
--- a/common_modules/module_manager/src/txm_module_manager_thread_notify_trampoline.c
+++ b/common_modules/module_manager/src/txm_module_manager_thread_notify_trampoline.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,12 +60,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_thread_notify_trampoline(TX_THREAD *thread_ptr, UINT type)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_thread_reset.c b/common_modules/module_manager/src/txm_module_manager_thread_reset.c
index 176f78e07..75dd4a495 100644
--- a/common_modules/module_manager/src/txm_module_manager_thread_reset.c
+++ b/common_modules/module_manager/src/txm_module_manager_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,12 +61,6 @@
/* */
/* _txm_module_manager_kernel_dispatch Kernel dispatch function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_timer_notify_trampoline.c b/common_modules/module_manager/src/txm_module_manager_timer_notify_trampoline.c
index 0d462d1e7..b2df699bd 100644
--- a/common_modules/module_manager/src/txm_module_manager_timer_notify_trampoline.c
+++ b/common_modules/module_manager/src/txm_module_manager_timer_notify_trampoline.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,12 +59,6 @@
/* */
/* ThreadX */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _txm_module_manager_timer_notify_trampoline(ULONG id)
{
diff --git a/common_modules/module_manager/src/txm_module_manager_unload.c b/common_modules/module_manager/src/txm_module_manager_unload.c
index 3f8b923a9..5fe96f6f6 100644
--- a/common_modules/module_manager/src/txm_module_manager_unload.c
+++ b/common_modules/module_manager/src/txm_module_manager_unload.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_unload(TXM_MODULE_INSTANCE *module_instance)
{
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 0e5abe5e3..78031b5fc 100644
--- a/common_modules/module_manager/src/txm_module_manager_util.c
+++ b/common_modules/module_manager/src/txm_module_manager_util.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* _txm_module_manager_kernel_dispatch Kernel dispatch function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size)
{
@@ -137,10 +132,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 */
+/* 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)
@@ -346,8 +341,8 @@ CHAR object_name_char;
/* */
/* DESCRIPTION */
/* */
-/* This function checks to make sure the object pointer for one of the */
-/* creation APIs is valid. */
+/* This function checks to make sure the object pointer for one of the */
+/* creation APIs is valid. */
/* */
/* INPUT */
/* */
@@ -357,8 +352,8 @@ CHAR object_name_char;
/* */
/* OUTPUT */
/* */
-/* TX_TRUE Valid object pointer */
-/* TX_FALSE Invalid object pointer */
+/* TX_TRUE Valid object pointer */
+/* TX_FALSE Invalid object pointer */
/* */
/* CALLS */
/* */
@@ -385,7 +380,7 @@ UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE
/* 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)
{
@@ -409,7 +404,7 @@ UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE
/* Object has already been created, which is invalid. */
return(TX_FALSE);
}
-
+
/* Everything is okay with the object, return TX_TRUE. */
return(TX_TRUE);
}
@@ -427,7 +422,7 @@ UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE
/* */
/* DESCRIPTION */
/* */
-/* This function checks to make sure the object pointer is valid. */
+/* This function checks to make sure the object pointer is valid. */
/* */
/* INPUT */
/* */
@@ -437,8 +432,8 @@ UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE
/* */
/* OUTPUT */
/* */
-/* TX_TRUE Valid object pointer */
-/* TX_FALSE Invalid object pointer */
+/* TX_TRUE Valid object pointer */
+/* TX_FALSE Invalid object pointer */
/* */
/* CALLS */
/* */
@@ -476,11 +471,11 @@ UINT _txm_module_manager_param_check_object_for_use(TXM_MODULE_INSTANCE *modu
/* 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);
}
diff --git a/common_modules/module_manager/utilities/module_binary_to_c_array.c b/common_modules/module_manager/utilities/module_binary_to_c_array.c
index b02fde6eb..da0cf97c6 100644
--- a/common_modules/module_manager/utilities/module_binary_to_c_array.c
+++ b/common_modules/module_manager/utilities/module_binary_to_c_array.c
@@ -21,7 +21,7 @@ unsigned long column;
/* Determine if the proper number of files are provided. */
- if (argc != 3)
+ if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
@@ -44,7 +44,7 @@ unsigned long column;
printf(" File: %s ", argv[1]);
return(2);
}
-
+
/* Determine if the binary file is a valid ThreadX module. */
alpha = fgetc(source_file);
alpha1 = fgetc(source_file);
@@ -94,7 +94,7 @@ unsigned long column;
address = 0;
column = 0;
- do
+ do
{
/* Get character from the input file. */
diff --git a/common_modules/module_manager/utilities/module_to_binary.c b/common_modules/module_manager/utilities/module_to_binary.c
index 77517e0d2..a749c8a32 100644
--- a/common_modules/module_manager/utilities/module_to_binary.c
+++ b/common_modules/module_manager/utilities/module_to_binary.c
@@ -14,7 +14,7 @@ FILE *binary_file;
#define ELF_EXECUTABLE 2
-typedef struct ELF_HEADER_STRUCT
+typedef struct ELF_HEADER_STRUCT
{
unsigned char elf_header_id_string[ELF_ID_STRING_SIZE];
unsigned short elf_header_file_type;
@@ -114,12 +114,12 @@ unsigned char *buffer;
for (i = 0; i < object_size; i++)
{
alpha = fgetc(source_file);
-
+
if (alpha == EOF)
return(1);
-
+
buffer[i] = (unsigned char) alpha;
- }
+ }
/* Return success. */
return(0);
@@ -140,7 +140,7 @@ unsigned char zero_value;
/* Determine if the proper number of files are provided. */
- if (argc != 3)
+ if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
@@ -163,7 +163,7 @@ unsigned char zero_value;
printf(" File: %s ", argv[1]);
return(2);
}
-
+
/* Attempt to open the binary file for writing. */
binary_file = fopen(argv[2], "wb");
@@ -182,7 +182,7 @@ unsigned char zero_value;
/* Allocate memory for the program header(s). */
program_header = malloc(sizeof(ELF_PROGRAM_HEADER)*header.elf_header_program_header_entries);
-
+
/* Read the program header(s). */
elf_object_read(header.elf_header_program_header_offset, program_header, (sizeof(ELF_PROGRAM_HEADER)*header.elf_header_program_header_entries));
@@ -194,7 +194,7 @@ unsigned char zero_value;
/* Alocate memory for the section string table. */
- section_string_table = malloc(section_header[header.elf_header_section_string_index].elf_section_header_size);
+ section_string_table = malloc(section_header[header.elf_header_section_string_index].elf_section_header_size);
/* Read the section string table. */
elf_object_read(section_header[header.elf_header_section_string_index].elf_section_header_offset, section_string_table, section_header[header.elf_header_section_string_index].elf_section_header_size);
@@ -315,7 +315,7 @@ unsigned char zero_value;
/* Move address forward. */
address++;
-
+
/* Decrement size. */
size--;
diff --git a/common_modules/module_manager/utilities/module_to_c_array.c b/common_modules/module_manager/utilities/module_to_c_array.c
index fc72092c9..37d931f39 100644
--- a/common_modules/module_manager/utilities/module_to_c_array.c
+++ b/common_modules/module_manager/utilities/module_to_c_array.c
@@ -14,7 +14,7 @@ FILE *array_file;
#define ELF_EXECUTABLE 2
-typedef struct ELF_HEADER_STRUCT
+typedef struct ELF_HEADER_STRUCT
{
unsigned char elf_header_id_string[ELF_ID_STRING_SIZE];
unsigned short elf_header_file_type;
@@ -114,12 +114,12 @@ unsigned char *buffer;
for (i = 0; i < object_size; i++)
{
alpha = fgetc(source_file);
-
+
if (alpha == EOF)
return(1);
-
+
buffer[i] = (unsigned char) alpha;
- }
+ }
/* Return success. */
return(0);
@@ -140,7 +140,7 @@ CODE_SECTION_ENTRY code_section_temp;
/* Determine if the proper number of files are provided. */
- if (argc != 3)
+ if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
@@ -163,7 +163,7 @@ CODE_SECTION_ENTRY code_section_temp;
printf(" File: %s ", argv[1]);
return(2);
}
-
+
/* Attempt to open the dump file for writing. */
array_file = fopen(argv[2], "w");
@@ -192,7 +192,7 @@ CODE_SECTION_ENTRY code_section_temp;
/* Allocate memory for the program header(s). */
program_header = malloc(sizeof(ELF_PROGRAM_HEADER)*header.elf_header_program_header_entries);
-
+
/* Read the program header(s). */
elf_object_read(header.elf_header_program_header_offset, program_header, (sizeof(ELF_PROGRAM_HEADER)*header.elf_header_program_header_entries));
@@ -204,7 +204,7 @@ CODE_SECTION_ENTRY code_section_temp;
/* Alocate memory for the section string table. */
- section_string_table = malloc(section_header[header.elf_header_section_string_index].elf_section_header_size);
+ section_string_table = malloc(section_header[header.elf_header_section_string_index].elf_section_header_size);
/* Read the section string table. */
elf_object_read(section_header[header.elf_header_section_string_index].elf_section_header_offset, section_string_table, section_header[header.elf_header_section_string_index].elf_section_header_size);
@@ -260,7 +260,7 @@ CODE_SECTION_ENTRY code_section_temp;
printf("**** Error: No code sections found! **** \n");
fprintf(array_file, "unsigned char module_code[] = {0x00};\n\n");
-
+
/* Close files. */
fclose(source_file);
fclose(array_file);
@@ -337,7 +337,7 @@ CODE_SECTION_ENTRY code_section_temp;
/* Write out the contents of this program area. */
size = code_section_array[i].code_section_size;
-
+
j = 0;
k = 0;
while (size)
@@ -372,7 +372,7 @@ CODE_SECTION_ENTRY code_section_temp;
/* Move address forward. */
address++;
-
+
/* Decrement size. */
size--;
diff --git a/common_smp/inc/tx_api.h b/common_smp/inc/tx_api.h
index ae5ffc8ff..7d0ccbe54 100644
--- a/common_smp/inc/tx_api.h
+++ b/common_smp/inc/tx_api.h
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
@@ -38,66 +39,6 @@
/* Please note that basic data type definitions and other architecture-*/
/* specific information is contained in the file tx_port.h. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-16-2020 William E. Lamie Modified comment(s), and */
-/* increased patch version, */
-/* resulting in version 6.1.1 */
-/* 12-31-2020 William E. Lamie Modified comment(s), and */
-/* increased patch version, */
-/* resulting in version 6.1.3 */
-/* 03-02-2021 Scott Larson Modified comment(s), and */
-/* order defines numerically, */
-/* add option to remove FileX */
-/* pointer, fix whitespace, */
-/* resulting in version 6.1.5 */
-/* 04-02-2021 Scott Larson Modified comment(s), and */
-/* update patch number, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added options for multiple */
-/* block pool search & delay, */
-/* resulting in version 6.1.7 */
-/* 08-02-2021 Scott Larson Modified comment(s), and */
-/* update patch number, */
-/* resulting in version 6.1.8 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), */
-/* add unused parameter macro, */
-/* update patch number, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Wenhui Xie Modified comment(s), */
-/* optimized the definition of */
-/* TX_TIMER_TICKS_PER_SECOND, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.1.12 */
-/* 10-31-2022 Scott Larson Modified comment(s), */
-/* add extension macros, */
-/* update version numbers, */
-/* resulting in version 6.2.0 */
-/* 03-08-2023 Tiejun Zhou Modified comment(s), */
-/* update patch number, */
-/* resulting in version 6.2.1 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Tiejun Zhou Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.0 */
-/* 03-01-2024 Tiejun Zhou Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.1 */
-/* 02-19-2025 Frédéric Desbiens Modified comment(s), */
-/* update version number, */
-/* resulting in version 6.4.2 */
-/* */
/**************************************************************************/
#ifndef TX_API_H
@@ -149,9 +90,9 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
-#define THREADX_MINOR_VERSION 4
-#define THREADX_PATCH_VERSION 5
-#define THREADX_BUILD_VERSION 202504
+#define THREADX_MINOR_VERSION 5
+#define THREADX_PATCH_VERSION 0
+#define THREADX_BUILD_VERSION 202601
#define THREADX_HOTFIX_VERSION ' '
@@ -334,6 +275,14 @@ extern "C" {
#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:
ThreadX events: 1-199
diff --git a/common_smp/inc/tx_block_pool.h b/common_smp/inc/tx_block_pool.h
index 2a8bb51e7..89c9dfbe4 100644
--- a/common_smp/inc/tx_block_pool.h
+++ b/common_smp/inc/tx_block_pool.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_BLOCK_POOL_H
diff --git a/common_smp/inc/tx_byte_pool.h b/common_smp/inc/tx_byte_pool.h
index 8f1050fa8..b9f343118 100644
--- a/common_smp/inc/tx_byte_pool.h
+++ b/common_smp/inc/tx_byte_pool.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_BYTE_POOL_H
diff --git a/common_smp/inc/tx_event_flags.h b/common_smp/inc/tx_event_flags.h
index 51e99536a..6506dd130 100644
--- a/common_smp/inc/tx_event_flags.h
+++ b/common_smp/inc/tx_event_flags.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EVENT_FLAGS_H
diff --git a/common_smp/inc/tx_initialize.h b/common_smp/inc/tx_initialize.h
index 28c7251bf..fd9449653 100644
--- a/common_smp/inc/tx_initialize.h
+++ b/common_smp/inc/tx_initialize.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_INITIALIZE_H
diff --git a/common_smp/inc/tx_mutex.h b/common_smp/inc/tx_mutex.h
index a3b52386a..b0b46c2f9 100644
--- a/common_smp/inc/tx_mutex.h
+++ b/common_smp/inc/tx_mutex.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_MUTEX_H
diff --git a/common_smp/inc/tx_queue.h b/common_smp/inc/tx_queue.h
index 7074a91ef..c8b4122c5 100644
--- a/common_smp/inc/tx_queue.h
+++ b/common_smp/inc/tx_queue.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_QUEUE_H
diff --git a/common_smp/inc/tx_semaphore.h b/common_smp/inc/tx_semaphore.h
index 6784e58f2..baf292bd6 100644
--- a/common_smp/inc/tx_semaphore.h
+++ b/common_smp/inc/tx_semaphore.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* including all data types and external references. It is assumed */
/* that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SEMAPHORE_H
diff --git a/common_smp/inc/tx_thread.h b/common_smp/inc/tx_thread.h
index 8bd684385..7dc7801be 100644
--- a/common_smp/inc/tx_thread.h
+++ b/common_smp/inc/tx_thread.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,14 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Fixed MISRA2012 rule 8.3, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
#ifndef TX_THREAD_H
diff --git a/common_smp/inc/tx_timer.h b/common_smp/inc/tx_timer.h
index d8277082e..71a65b27a 100644
--- a/common_smp/inc/tx_timer.h
+++ b/common_smp/inc/tx_timer.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* data types and external references. It is assumed that tx_api.h */
/* and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_TIMER_H
diff --git a/common_smp/inc/tx_trace.h b/common_smp/inc/tx_trace.h
index 07da204ba..ea0e59e56 100644
--- a/common_smp/inc/tx_trace.h
+++ b/common_smp/inc/tx_trace.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -35,14 +36,6 @@
/* and structure definitions as well as external references. It is */
/* assumed that tx_api.h and tx_port.h have already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
diff --git a/common_smp/inc/tx_user_sample.h b/common_smp/inc/tx_user_sample.h
index e7ecb56af..64ff9aedb 100644
--- a/common_smp/inc/tx_user_sample.h
+++ b/common_smp/inc/tx_user_sample.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,33 +40,6 @@
/* Note that all the defines in this file may also be made on the */
/* command line when building ThreadX library and application objects. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), */
-/* added option to remove */
-/* FileX pointer, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Added options for multiple */
-/* block pool search & delay, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Yuxin Zhou Modified comment(s), added */
-/* user-configurable symbol */
-/* TX_TIMER_TICKS_PER_SECOND */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Wenhui Xie Modified comment(s), */
-/* optimized the definition of */
-/* TX_TIMER_TICKS_PER_SECOND, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
#ifndef TX_USER_H
@@ -175,7 +149,7 @@
/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
pattern for stack filling. When the following is defined, ThreadX uses a random number
- for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
+ for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
/*
#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
diff --git a/common_smp/src/tx_block_allocate.c b/common_smp/src/tx_block_allocate.c
index b2c7bef5e..78619603c 100644
--- a/common_smp/src/tx_block_allocate.c
+++ b/common_smp/src/tx_block_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_allocate(TX_BLOCK_POOL *pool_ptr, VOID **block_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_block_pool_cleanup.c b/common_smp/src/tx_block_pool_cleanup.c
index 9bae546de..7bcfecd8a 100644
--- a/common_smp/src/tx_block_pool_cleanup.c
+++ b/common_smp/src/tx_block_pool_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_block_pool_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_block_pool_create.c b/common_smp/src/tx_block_pool_create.c
index 546120198..1d2c803cf 100644
--- a/common_smp/src/tx_block_pool_create.c
+++ b/common_smp/src/tx_block_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_create(TX_BLOCK_POOL *pool_ptr, CHAR *name_ptr, ULONG block_size,
VOID *pool_start, ULONG pool_size)
diff --git a/common_smp/src/tx_block_pool_delete.c b/common_smp/src/tx_block_pool_delete.c
index da27ef57b..19ecb0552 100644
--- a/common_smp/src/tx_block_pool_delete.c
+++ b/common_smp/src/tx_block_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_delete(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_smp/src/tx_block_pool_info_get.c b/common_smp/src/tx_block_pool_info_get.c
index aebd0db6b..5998f1db4 100644
--- a/common_smp/src/tx_block_pool_info_get.c
+++ b/common_smp/src/tx_block_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_info_get(TX_BLOCK_POOL *pool_ptr, CHAR **name, ULONG *available_blocks,
ULONG *total_blocks, TX_THREAD **first_suspended,
diff --git a/common_smp/src/tx_block_pool_initialize.c b/common_smp/src/tx_block_pool_initialize.c
index 211321597..e01eba329 100644
--- a/common_smp/src/tx_block_pool_initialize.c
+++ b/common_smp/src/tx_block_pool_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -97,17 +98,6 @@ ULONG _tx_block_pool_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_block_pool_initialize(VOID)
{
diff --git a/common_smp/src/tx_block_pool_performance_info_get.c b/common_smp/src/tx_block_pool_performance_info_get.c
index 84f680268..aecf78510 100644
--- a/common_smp/src/tx_block_pool_performance_info_get.c
+++ b/common_smp/src/tx_block_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_info_get(TX_BLOCK_POOL *pool_ptr, ULONG *allocates, ULONG *releases,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common_smp/src/tx_block_pool_performance_system_info_get.c b/common_smp/src/tx_block_pool_performance_system_info_get.c
index 0707295d9..86627dd02 100644
--- a/common_smp/src/tx_block_pool_performance_system_info_get.c
+++ b/common_smp/src/tx_block_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_performance_system_info_get(ULONG *allocates, ULONG *releases, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_smp/src/tx_block_pool_prioritize.c b/common_smp/src/tx_block_pool_prioritize.c
index c4ee4e941..89c2d634d 100644
--- a/common_smp/src/tx_block_pool_prioritize.c
+++ b/common_smp/src/tx_block_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_pool_prioritize(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_smp/src/tx_block_release.c b/common_smp/src/tx_block_release.c
index 3b94c1bb0..4a11fe08a 100644
--- a/common_smp/src/tx_block_release.c
+++ b/common_smp/src/tx_block_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_block_release(VOID *block_ptr)
{
diff --git a/common_smp/src/tx_byte_allocate.c b/common_smp/src/tx_byte_allocate.c
index 69e837e3b..2e1a2e5e5 100644
--- a/common_smp/src/tx_byte_allocate.c
+++ b/common_smp/src/tx_byte_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_allocate(TX_BYTE_POOL *pool_ptr, VOID **memory_ptr, ULONG memory_size, ULONG wait_option)
{
diff --git a/common_smp/src/tx_byte_pool_cleanup.c b/common_smp/src/tx_byte_pool_cleanup.c
index a1260c5bf..3a7acd548 100644
--- a/common_smp/src/tx_byte_pool_cleanup.c
+++ b/common_smp/src/tx_byte_pool_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_byte_pool_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_byte_pool_create.c b/common_smp/src/tx_byte_pool_create.c
index 439eed7c4..21abbe356 100644
--- a/common_smp/src/tx_byte_pool_create.c
+++ b/common_smp/src/tx_byte_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_create(TX_BYTE_POOL *pool_ptr, CHAR *name_ptr, VOID *pool_start, ULONG pool_size)
{
diff --git a/common_smp/src/tx_byte_pool_delete.c b/common_smp/src/tx_byte_pool_delete.c
index fc3d9be11..3a24705fc 100644
--- a/common_smp/src/tx_byte_pool_delete.c
+++ b/common_smp/src/tx_byte_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_delete(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_smp/src/tx_byte_pool_info_get.c b/common_smp/src/tx_byte_pool_info_get.c
index 339aa7711..bd0964407 100644
--- a/common_smp/src/tx_byte_pool_info_get.c
+++ b/common_smp/src/tx_byte_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_info_get(TX_BYTE_POOL *pool_ptr, CHAR **name, ULONG *available_bytes,
ULONG *fragments, TX_THREAD **first_suspended,
diff --git a/common_smp/src/tx_byte_pool_initialize.c b/common_smp/src/tx_byte_pool_initialize.c
index 65514536c..652ec8290 100644
--- a/common_smp/src/tx_byte_pool_initialize.c
+++ b/common_smp/src/tx_byte_pool_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -112,17 +113,6 @@ ULONG _tx_byte_pool_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_byte_pool_initialize(VOID)
{
diff --git a/common_smp/src/tx_byte_pool_performance_info_get.c b/common_smp/src/tx_byte_pool_performance_info_get.c
index 400804a2d..6c2fd6151 100644
--- a/common_smp/src/tx_byte_pool_performance_info_get.c
+++ b/common_smp/src/tx_byte_pool_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,14 +79,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_info_get(TX_BYTE_POOL *pool_ptr, ULONG *allocates, ULONG *releases,
ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
diff --git a/common_smp/src/tx_byte_pool_performance_system_info_get.c b/common_smp/src/tx_byte_pool_performance_system_info_get.c
index 266e27679..23f41c474 100644
--- a/common_smp/src/tx_byte_pool_performance_system_info_get.c
+++ b/common_smp/src/tx_byte_pool_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -75,14 +76,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_performance_system_info_get(ULONG *allocates, ULONG *releases,
ULONG *fragments_searched, ULONG *merges, ULONG *splits, ULONG *suspensions, ULONG *timeouts)
diff --git a/common_smp/src/tx_byte_pool_prioritize.c b/common_smp/src/tx_byte_pool_prioritize.c
index 0076e503a..dc2ecc038 100644
--- a/common_smp/src/tx_byte_pool_prioritize.c
+++ b/common_smp/src/tx_byte_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_pool_prioritize(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_smp/src/tx_byte_pool_search.c b/common_smp/src/tx_byte_pool_search.c
index 7f24ee699..712c94890 100644
--- a/common_smp/src/tx_byte_pool_search.c
+++ b/common_smp/src/tx_byte_pool_search.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* _tx_byte_allocate Allocate bytes of memory */
/* _tx_byte_release Release bytes of memory */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 06-02-2021 Scott Larson Improve possible free bytes */
-/* calculation, and reduced */
-/* number of search resets, */
-/* resulting in version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Fixed MISRA2012 rule 10.4_a, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
UCHAR *_tx_byte_pool_search(TX_BYTE_POOL *pool_ptr, ULONG memory_size)
{
diff --git a/common_smp/src/tx_byte_release.c b/common_smp/src/tx_byte_release.c
index 387320bab..b56665edb 100644
--- a/common_smp/src/tx_byte_release.c
+++ b/common_smp/src/tx_byte_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_byte_release(VOID *memory_ptr)
{
diff --git a/common_smp/src/tx_event_flags_cleanup.c b/common_smp/src/tx_event_flags_cleanup.c
index 3f8705643..ac7bc68b0 100644
--- a/common_smp/src/tx_event_flags_cleanup.c
+++ b/common_smp/src/tx_event_flags_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_event_flags_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_event_flags_create.c b/common_smp/src/tx_event_flags_create.c
index 2195527ae..2a9c042d6 100644
--- a/common_smp/src/tx_event_flags_create.c
+++ b/common_smp/src/tx_event_flags_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr)
{
diff --git a/common_smp/src/tx_event_flags_delete.c b/common_smp/src/tx_event_flags_delete.c
index 2b7c890ab..777f2491d 100644
--- a/common_smp/src/tx_event_flags_delete.c
+++ b/common_smp/src/tx_event_flags_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_delete(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common_smp/src/tx_event_flags_get.c b/common_smp/src/tx_event_flags_get.c
index 4e9abb804..3136d1595 100644
--- a/common_smp/src/tx_event_flags_get.c
+++ b/common_smp/src/tx_event_flags_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-25-2022 Scott Larson Modified comment(s), */
-/* handle 0 flags case, */
-/* resulting in version 6.1.11 */
-/* 10-31-2022 Scott Larson Modified comment(s), always */
-/* return actual flags, */
-/* resulting in version 6.2.0 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG requested_flags,
UINT get_option, ULONG *actual_flags_ptr, ULONG wait_option)
diff --git a/common_smp/src/tx_event_flags_info_get.c b/common_smp/src/tx_event_flags_info_get.c
index 9d409bc59..21e85c9a1 100644
--- a/common_smp/src/tx_event_flags_info_get.c
+++ b/common_smp/src/tx_event_flags_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR **name, ULONG *current_flags,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/tx_event_flags_initialize.c b/common_smp/src/tx_event_flags_initialize.c
index f7b107c88..d5cd72b9f 100644
--- a/common_smp/src/tx_event_flags_initialize.c
+++ b/common_smp/src/tx_event_flags_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,17 +99,6 @@ ULONG _tx_event_flags_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_event_flags_initialize(VOID)
{
diff --git a/common_smp/src/tx_event_flags_performance_info_get.c b/common_smp/src/tx_event_flags_performance_info_get.c
index c0529b035..213c2d2a2 100644
--- a/common_smp/src/tx_event_flags_performance_info_get.c
+++ b/common_smp/src/tx_event_flags_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG *sets, ULONG *gets,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common_smp/src/tx_event_flags_performance_system_info_get.c b/common_smp/src/tx_event_flags_performance_system_info_get.c
index 3f1570df1..4902b0e17 100644
--- a/common_smp/src/tx_event_flags_performance_system_info_get.c
+++ b/common_smp/src/tx_event_flags_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_performance_system_info_get(ULONG *sets, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_smp/src/tx_event_flags_set.c b/common_smp/src/tx_event_flags_set.c
index 8309be14d..749343c81 100644
--- a/common_smp/src/tx_event_flags_set.c
+++ b/common_smp/src/tx_event_flags_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,18 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-25-2022 William E. Lamie Modified comment(s), and */
-/* added corrected preemption */
-/* check logic, resulting in */
-/* version 6.1.11 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG flags_to_set, UINT set_option)
{
@@ -336,8 +325,8 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Disable preemption while we process the suspended list. */
_tx_thread_preempt_disable++;
- /* Since we have temporarily disabled preemption globally, set the preempt
- check flag to check for any preemption condition - including from
+ /* Since we have temporarily disabled preemption globally, set the preempt
+ check flag to check for any preemption condition - including from
unrelated ISR processing. */
preempt_check = TX_TRUE;
diff --git a/common_smp/src/tx_event_flags_set_notify.c b/common_smp/src/tx_event_flags_set_notify.c
index ab2b9a1ce..4cafdd57a 100644
--- a/common_smp/src/tx_event_flags_set_notify.c
+++ b/common_smp/src/tx_event_flags_set_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_event_flags_set_notify(TX_EVENT_FLAGS_GROUP *group_ptr, VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr))
{
diff --git a/common_smp/src/tx_initialize_high_level.c b/common_smp/src/tx_initialize_high_level.c
index b72245516..77bc3ed78 100644
--- a/common_smp/src/tx_initialize_high_level.c
+++ b/common_smp/src/tx_initialize_high_level.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,14 +101,6 @@ VOID *_tx_initialize_unused_memory;
/* is optionally called by */
/* compiler's startup code. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_initialize_high_level(VOID)
{
diff --git a/common_smp/src/tx_initialize_kernel_enter.c b/common_smp/src/tx_initialize_kernel_enter.c
index 89c94dba2..5fa71b8fa 100644
--- a/common_smp/src/tx_initialize_kernel_enter.c
+++ b/common_smp/src/tx_initialize_kernel_enter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,16 +83,6 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* */
/* main Application main program */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added random generator */
-/* initialization, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
VOID _tx_initialize_kernel_enter(VOID)
{
diff --git a/common_smp/src/tx_initialize_kernel_setup.c b/common_smp/src/tx_initialize_kernel_setup.c
index 2cc5e68e5..1e750dbdb 100644
--- a/common_smp/src/tx_initialize_kernel_setup.c
+++ b/common_smp/src/tx_initialize_kernel_setup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* startup code Compiler startup code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_initialize_kernel_setup(VOID)
{
diff --git a/common_smp/src/tx_misra.c b/common_smp/src/tx_misra.c
index 49b6cf655..f5dd5f53d 100644
--- a/common_smp/src/tx_misra.c
+++ b/common_smp/src/tx_misra.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -30,7 +31,7 @@
#ifdef TX_MISRA_ENABLE
#define TX_THREAD_INIT
-//CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+//CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
#include "tx_api.h"
#include "tx_thread.h"
diff --git a/common_smp/src/tx_mutex_cleanup.c b/common_smp/src/tx_mutex_cleanup.c
index 09acbf4df..d32f69fc0 100644
--- a/common_smp/src/tx_mutex_cleanup.c
+++ b/common_smp/src/tx_mutex_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_mutex_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_mutex_create.c b/common_smp/src/tx_mutex_create.c
index 993bf3445..436c01f50 100644
--- a/common_smp/src/tx_mutex_create.c
+++ b/common_smp/src/tx_mutex_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_create(TX_MUTEX *mutex_ptr, CHAR *name_ptr, UINT inherit)
{
diff --git a/common_smp/src/tx_mutex_delete.c b/common_smp/src/tx_mutex_delete.c
index ca5aeca86..9c0a5aacd 100644
--- a/common_smp/src/tx_mutex_delete.c
+++ b/common_smp/src/tx_mutex_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_delete(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/tx_mutex_get.c b/common_smp/src/tx_mutex_get.c
index 91e97f14d..402a0f0d0 100644
--- a/common_smp/src/tx_mutex_get.c
+++ b/common_smp/src/tx_mutex_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_get(TX_MUTEX *mutex_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_mutex_info_get.c b/common_smp/src/tx_mutex_info_get.c
index 219bcc181..a24d1e30e 100644
--- a/common_smp/src/tx_mutex_info_get.c
+++ b/common_smp/src/tx_mutex_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_info_get(TX_MUTEX *mutex_ptr, CHAR **name, ULONG *count, TX_THREAD **owner,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/tx_mutex_initialize.c b/common_smp/src/tx_mutex_initialize.c
index ea2ca458b..98460cd69 100644
--- a/common_smp/src/tx_mutex_initialize.c
+++ b/common_smp/src/tx_mutex_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -107,17 +108,6 @@ ULONG _tx_mutex_performance__priority_inheritance_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_mutex_initialize(VOID)
{
diff --git a/common_smp/src/tx_mutex_performance_info_get.c b/common_smp/src/tx_mutex_performance_info_get.c
index 501a417a0..0704c111a 100644
--- a/common_smp/src/tx_mutex_performance_info_get.c
+++ b/common_smp/src/tx_mutex_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_info_get(TX_MUTEX *mutex_ptr, ULONG *puts, ULONG *gets,
ULONG *suspensions, ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
diff --git a/common_smp/src/tx_mutex_performance_system_info_get.c b/common_smp/src/tx_mutex_performance_system_info_get.c
index 9ca171973..458a5945b 100644
--- a/common_smp/src/tx_mutex_performance_system_info_get.c
+++ b/common_smp/src/tx_mutex_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions,
ULONG *timeouts, ULONG *inversions, ULONG *inheritances)
diff --git a/common_smp/src/tx_mutex_prioritize.c b/common_smp/src/tx_mutex_prioritize.c
index 3006b7d0f..6522307d4 100644
--- a/common_smp/src/tx_mutex_prioritize.c
+++ b/common_smp/src/tx_mutex_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_prioritize(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/tx_mutex_priority_change.c b/common_smp/src/tx_mutex_priority_change.c
index e7d2eeaf2..8722a8fb8 100644
--- a/common_smp/src/tx_mutex_priority_change.c
+++ b/common_smp/src/tx_mutex_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,12 +72,6 @@
/* _tx_mutex_get Inherit priority */
/* _tx_mutex_put Restore previous priority */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_mutex_priority_change(TX_THREAD *thread_ptr, UINT new_priority)
{
diff --git a/common_smp/src/tx_mutex_put.c b/common_smp/src/tx_mutex_put.c
index 6ac5065d7..062472a24 100644
--- a/common_smp/src/tx_mutex_put.c
+++ b/common_smp/src/tx_mutex_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_mutex_put(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/tx_queue_cleanup.c b/common_smp/src/tx_queue_cleanup.c
index 82d02f45c..05a423b38 100644
--- a/common_smp/src/tx_queue_cleanup.c
+++ b/common_smp/src/tx_queue_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_queue_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_queue_create.c b/common_smp/src/tx_queue_create.c
index 00edbad95..59ae154e4 100644
--- a/common_smp/src/tx_queue_create.c
+++ b/common_smp/src/tx_queue_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_create(TX_QUEUE *queue_ptr, CHAR *name_ptr, UINT message_size,
VOID *queue_start, ULONG queue_size)
diff --git a/common_smp/src/tx_queue_delete.c b/common_smp/src/tx_queue_delete.c
index 9887b1601..6a2bcf6f3 100644
--- a/common_smp/src/tx_queue_delete.c
+++ b/common_smp/src/tx_queue_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_delete(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/tx_queue_flush.c b/common_smp/src/tx_queue_flush.c
index 5120c8988..b721cf50c 100644
--- a/common_smp/src/tx_queue_flush.c
+++ b/common_smp/src/tx_queue_flush.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_flush(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/tx_queue_front_send.c b/common_smp/src/tx_queue_front_send.c
index 5e8b41043..bb39b970b 100644
--- a/common_smp/src/tx_queue_front_send.c
+++ b/common_smp/src/tx_queue_front_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_front_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_queue_info_get.c b/common_smp/src/tx_queue_info_get.c
index 3b37b37fa..d0ecb2b65 100644
--- a/common_smp/src/tx_queue_info_get.c
+++ b/common_smp/src/tx_queue_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_info_get(TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage,
TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue)
diff --git a/common_smp/src/tx_queue_initialize.c b/common_smp/src/tx_queue_initialize.c
index 7a8112345..eb34f18b9 100644
--- a/common_smp/src/tx_queue_initialize.c
+++ b/common_smp/src/tx_queue_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -105,17 +106,6 @@ ULONG _tx_queue_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_queue_initialize(VOID)
{
diff --git a/common_smp/src/tx_queue_performance_info_get.c b/common_smp/src/tx_queue_performance_info_get.c
index 721a7e5f6..7c4265158 100644
--- a/common_smp/src/tx_queue_performance_info_get.c
+++ b/common_smp/src/tx_queue_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_info_get(TX_QUEUE *queue_ptr, ULONG *messages_sent, ULONG *messages_received,
ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
diff --git a/common_smp/src/tx_queue_performance_system_info_get.c b/common_smp/src/tx_queue_performance_system_info_get.c
index 87cfb4a6a..306c97a2d 100644
--- a/common_smp/src/tx_queue_performance_system_info_get.c
+++ b/common_smp/src/tx_queue_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_performance_system_info_get(ULONG *messages_sent, ULONG *messages_received,
ULONG *empty_suspensions, ULONG *full_suspensions, ULONG *full_errors, ULONG *timeouts)
diff --git a/common_smp/src/tx_queue_prioritize.c b/common_smp/src/tx_queue_prioritize.c
index 4f875078d..dbea0a6b1 100644
--- a/common_smp/src/tx_queue_prioritize.c
+++ b/common_smp/src/tx_queue_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_prioritize(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/tx_queue_receive.c b/common_smp/src/tx_queue_receive.c
index 31a22f946..a6ab03909 100644
--- a/common_smp/src/tx_queue_receive.c
+++ b/common_smp/src/tx_queue_receive.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_queue_send.c b/common_smp/src/tx_queue_send.c
index 3ca970a01..7d22f5b9c 100644
--- a/common_smp/src/tx_queue_send.c
+++ b/common_smp/src/tx_queue_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_queue_send_notify.c b/common_smp/src/tx_queue_send_notify.c
index f46d153a1..05af2f03a 100644
--- a/common_smp/src/tx_queue_send_notify.c
+++ b/common_smp/src/tx_queue_send_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_queue_send_notify(TX_QUEUE *queue_ptr, VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr))
{
diff --git a/common_smp/src/tx_semaphore_ceiling_put.c b/common_smp/src/tx_semaphore_ceiling_put.c
index a72b094af..9b02e731f 100644
--- a/common_smp/src/tx_semaphore_ceiling_put.c
+++ b/common_smp/src/tx_semaphore_ceiling_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_ceiling_put(TX_SEMAPHORE *semaphore_ptr, ULONG ceiling)
{
diff --git a/common_smp/src/tx_semaphore_cleanup.c b/common_smp/src/tx_semaphore_cleanup.c
index 512f6c60e..0e3cd9652 100644
--- a/common_smp/src/tx_semaphore_cleanup.c
+++ b/common_smp/src/tx_semaphore_cleanup.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* _tx_thread_terminate Thread terminate processing */
/* _tx_thread_wait_abort Thread wait abort processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_semaphore_cleanup(TX_THREAD *thread_ptr, ULONG suspension_sequence)
{
diff --git a/common_smp/src/tx_semaphore_create.c b/common_smp/src/tx_semaphore_create.c
index 3acf3f411..849f5d3b5 100644
--- a/common_smp/src/tx_semaphore_create.c
+++ b/common_smp/src/tx_semaphore_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_create(TX_SEMAPHORE *semaphore_ptr, CHAR *name_ptr, ULONG initial_count)
{
diff --git a/common_smp/src/tx_semaphore_delete.c b/common_smp/src/tx_semaphore_delete.c
index eee19755f..8a0515a04 100644
--- a/common_smp/src/tx_semaphore_delete.c
+++ b/common_smp/src/tx_semaphore_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_delete(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/tx_semaphore_get.c b/common_smp/src/tx_semaphore_get.c
index 5a4719979..52802da1c 100644
--- a/common_smp/src/tx_semaphore_get.c
+++ b/common_smp/src/tx_semaphore_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_get(TX_SEMAPHORE *semaphore_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/tx_semaphore_info_get.c b/common_smp/src/tx_semaphore_info_get.c
index 70e98a71d..89fd94238 100644
--- a/common_smp/src/tx_semaphore_info_get.c
+++ b/common_smp/src/tx_semaphore_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_info_get(TX_SEMAPHORE *semaphore_ptr, CHAR **name, ULONG *current_value,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/tx_semaphore_initialize.c b/common_smp/src/tx_semaphore_initialize.c
index 84358cc57..d2b169df5 100644
--- a/common_smp/src/tx_semaphore_initialize.c
+++ b/common_smp/src/tx_semaphore_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -97,17 +98,6 @@ ULONG _tx_semaphore_performance_timeout_count;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* opt out of function when */
-/* TX_INLINE_INITIALIZATION is */
-/* defined, */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_semaphore_initialize(VOID)
{
diff --git a/common_smp/src/tx_semaphore_performance_info_get.c b/common_smp/src/tx_semaphore_performance_info_get.c
index a623705f0..4c7ffa4e4 100644
--- a/common_smp/src/tx_semaphore_performance_info_get.c
+++ b/common_smp/src/tx_semaphore_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_info_get(TX_SEMAPHORE *semaphore_ptr, ULONG *puts, ULONG *gets,
ULONG *suspensions, ULONG *timeouts)
diff --git a/common_smp/src/tx_semaphore_performance_system_info_get.c b/common_smp/src/tx_semaphore_performance_system_info_get.c
index 5245d00b6..db17c937f 100644
--- a/common_smp/src/tx_semaphore_performance_system_info_get.c
+++ b/common_smp/src/tx_semaphore_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_performance_system_info_get(ULONG *puts, ULONG *gets, ULONG *suspensions, ULONG *timeouts)
{
diff --git a/common_smp/src/tx_semaphore_prioritize.c b/common_smp/src/tx_semaphore_prioritize.c
index 56245df86..eec5e7b76 100644
--- a/common_smp/src/tx_semaphore_prioritize.c
+++ b/common_smp/src/tx_semaphore_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_prioritize(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/tx_semaphore_put.c b/common_smp/src/tx_semaphore_put.c
index dacd0db04..1ce9d1451 100644
--- a/common_smp/src/tx_semaphore_put.c
+++ b/common_smp/src/tx_semaphore_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_put(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/tx_semaphore_put_notify.c b/common_smp/src/tx_semaphore_put_notify.c
index b1abe3be1..80894d6eb 100644
--- a/common_smp/src/tx_semaphore_put_notify.c
+++ b/common_smp/src/tx_semaphore_put_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_semaphore_put_notify(TX_SEMAPHORE *semaphore_ptr, VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr))
{
diff --git a/common_smp/src/tx_thread_create.c b/common_smp/src/tx_thread_create.c
index f66e393c5..28a1dae1b 100644
--- a/common_smp/src/tx_thread_create.c
+++ b/common_smp/src/tx_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -75,24 +76,6 @@
/* Application Code */
/* _tx_timer_initialize Create system timer thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 12-31-2020 Andres Mlinar Modified comment(s), */
-/* resulting in version 6.1.3 */
-/* 08-02-2021 Scott Larson Removed unneeded cast, */
-/* resulting in version 6.1.8 */
-/* 10-31-2022 Scott Larson Removed ifdef block to always */
-/* restore interrupts at end */
-/* of if block, */
-/* resulting in version 6.2.0 */
-/* 10-31-2023 Xiuwen Cai Modified comment(s), */
-/* added option for random */
-/* number stack filling, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
VOID (*entry_function)(ULONG id), ULONG entry_input,
diff --git a/common_smp/src/tx_thread_delete.c b/common_smp/src/tx_thread_delete.c
index 69626c507..510f6565e 100644
--- a/common_smp/src/tx_thread_delete.c
+++ b/common_smp/src/tx_thread_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_delete(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_entry_exit_notify.c b/common_smp/src/tx_thread_entry_exit_notify.c
index 7d5919dec..fdce25efd 100644
--- a/common_smp/src/tx_thread_entry_exit_notify.c
+++ b/common_smp/src/tx_thread_entry_exit_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_entry_exit_notify(TX_THREAD *thread_ptr, VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT id))
{
diff --git a/common_smp/src/tx_thread_identify.c b/common_smp/src/tx_thread_identify.c
index 7808d0531..86f56194c 100644
--- a/common_smp/src/tx_thread_identify.c
+++ b/common_smp/src/tx_thread_identify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
TX_THREAD *_tx_thread_identify(VOID)
{
diff --git a/common_smp/src/tx_thread_info_get.c b/common_smp/src/tx_thread_info_get.c
index d90694579..740a3b95d 100644
--- a/common_smp/src/tx_thread_info_get.c
+++ b/common_smp/src/tx_thread_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_info_get(TX_THREAD *thread_ptr, CHAR **name, UINT *state, ULONG *run_count,
UINT *priority, UINT *preemption_threshold, ULONG *time_slice,
diff --git a/common_smp/src/tx_thread_initialize.c b/common_smp/src/tx_thread_initialize.c
index eb0fc059b..f37931096 100644
--- a/common_smp/src/tx_thread_initialize.c
+++ b/common_smp/src/tx_thread_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -341,12 +342,6 @@ const CHAR _tx_thread_special_string[] =
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_initialize(VOID)
{
diff --git a/common_smp/src/tx_thread_performance_info_get.c b/common_smp/src/tx_thread_performance_info_get.c
index 92c0e02bd..79a8c7ee2 100644
--- a/common_smp/src/tx_thread_performance_info_get.c
+++ b/common_smp/src/tx_thread_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -87,14 +88,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_info_get(TX_THREAD *thread_ptr, ULONG *resumptions, ULONG *suspensions,
ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions,
diff --git a/common_smp/src/tx_thread_performance_system_info_get.c b/common_smp/src/tx_thread_performance_system_info_get.c
index a6c300aa0..8ade15ddb 100644
--- a/common_smp/src/tx_thread_performance_system_info_get.c
+++ b/common_smp/src/tx_thread_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -87,14 +88,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_performance_system_info_get(ULONG *resumptions, ULONG *suspensions,
ULONG *solicited_preemptions, ULONG *interrupt_preemptions, ULONG *priority_inversions,
diff --git a/common_smp/src/tx_thread_preemption_change.c b/common_smp/src/tx_thread_preemption_change.c
index eac39d6fe..b309308c1 100644
--- a/common_smp/src/tx_thread_preemption_change.c
+++ b/common_smp/src/tx_thread_preemption_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,12 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_preemption_change(TX_THREAD *thread_ptr, UINT new_threshold, UINT *old_threshold)
{
diff --git a/common_smp/src/tx_thread_priority_change.c b/common_smp/src/tx_thread_priority_change.c
index 6436a2924..57d6eda79 100644
--- a/common_smp/src/tx_thread_priority_change.c
+++ b/common_smp/src/tx_thread_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,12 +75,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_priority_change(TX_THREAD *thread_ptr, UINT new_priority, UINT *old_priority)
{
diff --git a/common_smp/src/tx_thread_relinquish.c b/common_smp/src/tx_thread_relinquish.c
index ea160b502..10982b264 100644
--- a/common_smp/src/tx_thread_relinquish.c
+++ b/common_smp/src/tx_thread_relinquish.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,12 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_relinquish(VOID)
{
diff --git a/common_smp/src/tx_thread_reset.c b/common_smp/src/tx_thread_reset.c
index 1fea78be7..da56daf57 100644
--- a/common_smp/src/tx_thread_reset.c
+++ b/common_smp/src/tx_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_resume.c b/common_smp/src/tx_thread_resume.c
index 1537c7301..e2da7d239 100644
--- a/common_smp/src/tx_thread_resume.c
+++ b/common_smp/src/tx_thread_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,12 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_resume(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_shell_entry.c b/common_smp/src/tx_thread_shell_entry.c
index 161ea80e3..45fe9d6da 100644
--- a/common_smp/src/tx_thread_shell_entry.c
+++ b/common_smp/src/tx_thread_shell_entry.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Initial thread stack frame */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_shell_entry(VOID)
{
diff --git a/common_smp/src/tx_thread_sleep.c b/common_smp/src/tx_thread_sleep.c
index 6d6c92c43..fd986a0b6 100644
--- a/common_smp/src/tx_thread_sleep.c
+++ b/common_smp/src/tx_thread_sleep.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_sleep(ULONG timer_ticks)
{
diff --git a/common_smp/src/tx_thread_smp_core_exclude.c b/common_smp/src/tx_thread_smp_core_exclude.c
index 477c99f1e..ee67cfce1 100644
--- a/common_smp/src/tx_thread_smp_core_exclude.c
+++ b/common_smp/src/tx_thread_smp_core_exclude.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,12 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_smp_core_exclude(TX_THREAD *thread_ptr, ULONG exclusion_map)
{
diff --git a/common_smp/src/tx_thread_smp_core_exclude_get.c b/common_smp/src/tx_thread_smp_core_exclude_get.c
index 962f45e3d..bc517f5d2 100644
--- a/common_smp/src/tx_thread_smp_core_exclude_get.c
+++ b/common_smp/src/tx_thread_smp_core_exclude_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_smp_core_exclude_get(TX_THREAD *thread_ptr, ULONG *exclusion_map_ptr)
{
diff --git a/common_smp/src/tx_thread_smp_current_state_set.c b/common_smp/src/tx_thread_smp_current_state_set.c
index 5491aa18b..0187ac8c7 100644
--- a/common_smp/src/tx_thread_smp_current_state_set.c
+++ b/common_smp/src/tx_thread_smp_current_state_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,12 +63,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
void _tx_thread_smp_current_state_set(ULONG new_state)
{
diff --git a/common_smp/src/tx_thread_smp_debug_entry_insert.c b/common_smp/src/tx_thread_smp_debug_entry_insert.c
index 70e86dc7f..951487030 100644
--- a/common_smp/src/tx_thread_smp_debug_entry_insert.c
+++ b/common_smp/src/tx_thread_smp_debug_entry_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -118,12 +119,6 @@ ULONG _tx_thread_smp_debug_info_current_index;
/* */
/* Internal routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
void _tx_thread_smp_debug_entry_insert(ULONG id, ULONG suspend, VOID *thread_void_ptr)
{
diff --git a/common_smp/src/tx_thread_smp_high_level_initialize.c b/common_smp/src/tx_thread_smp_high_level_initialize.c
index 73c77ac64..a544b3deb 100644
--- a/common_smp/src/tx_thread_smp_high_level_initialize.c
+++ b/common_smp/src/tx_thread_smp_high_level_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,16 +64,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 12-31-2020 William E. Lamie Modified comments, added */
-/* cast to address a MISRA */
-/* compliant issue, */
-/* resulting in version 6.1.3 */
-/* */
/**************************************************************************/
void _tx_thread_smp_high_level_initialize(void)
{
diff --git a/common_smp/src/tx_thread_smp_rebalance_execute_list.c b/common_smp/src/tx_thread_smp_rebalance_execute_list.c
index 019c7209f..6be7257ab 100644
--- a/common_smp/src/tx_thread_smp_rebalance_execute_list.c
+++ b/common_smp/src/tx_thread_smp_rebalance_execute_list.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@
/* _tx_thread_system_suspend Thread suspend */
/* _tx_thread_time_slice Thread time-slice */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
void _tx_thread_smp_rebalance_execute_list(UINT core_index)
{
diff --git a/common_smp/src/tx_thread_smp_utilities.c b/common_smp/src/tx_thread_smp_utilities.c
index 25e24df1f..833a9aab4 100644
--- a/common_smp/src/tx_thread_smp_utilities.c
+++ b/common_smp/src/tx_thread_smp_utilities.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/common_smp/src/tx_thread_stack_analyze.c b/common_smp/src/tx_thread_stack_analyze.c
index bdadab0df..080d00522 100644
--- a/common_smp/src/tx_thread_stack_analyze.c
+++ b/common_smp/src/tx_thread_stack_analyze.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* ThreadX internal code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_stack_analyze(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_stack_error_handler.c b/common_smp/src/tx_thread_stack_error_handler.c
index 1f8d89fa5..d82005f03 100644
--- a/common_smp/src/tx_thread_stack_error_handler.c
+++ b/common_smp/src/tx_thread_stack_error_handler.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,15 +61,6 @@
/* */
/* ThreadX internal code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-16-2020 William E. Lamie Modified comment(s), */
-/* fixed link issue, */
-/* resulting in version 6.1.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_stack_error_handler(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_stack_error_notify.c b/common_smp/src/tx_thread_stack_error_notify.c
index 4a257740a..b300a1311 100644
--- a/common_smp/src/tx_thread_stack_error_notify.c
+++ b/common_smp/src/tx_thread_stack_error_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_stack_error_notify(VOID (*stack_error_handler)(TX_THREAD *thread_ptr))
{
diff --git a/common_smp/src/tx_thread_suspend.c b/common_smp/src/tx_thread_suspend.c
index c600c3df2..1ad3cd81c 100644
--- a/common_smp/src/tx_thread_suspend.c
+++ b/common_smp/src/tx_thread_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_system_preempt_check.c b/common_smp/src/tx_thread_system_preempt_check.c
index e9efa2fb9..c70072c5a 100644
--- a/common_smp/src/tx_thread_system_preempt_check.c
+++ b/common_smp/src/tx_thread_system_preempt_check.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_preempt_check(VOID)
{
diff --git a/common_smp/src/tx_thread_system_resume.c b/common_smp/src/tx_thread_system_resume.c
index 77c09219a..256c06f2a 100644
--- a/common_smp/src/tx_thread_system_resume.c
+++ b/common_smp/src/tx_thread_system_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -90,12 +91,6 @@
/* _tx_thread_wait_abort Thread wait abort */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_resume(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_system_suspend.c b/common_smp/src/tx_thread_system_suspend.c
index 633989993..d5bf5cc76 100644
--- a/common_smp/src/tx_thread_system_suspend.c
+++ b/common_smp/src/tx_thread_system_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,17 +83,6 @@
/* _tx_thread_terminate Thread terminate */
/* Other ThreadX Components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Scott Larson Modified comments and fixed */
-/* loop to find next thread, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Fixed MISRA2012 rule 10.4_a, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
VOID _tx_thread_system_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_terminate.c b/common_smp/src/tx_thread_terminate.c
index 1e30687f5..86e34baeb 100644
--- a/common_smp/src/tx_thread_terminate.c
+++ b/common_smp/src/tx_thread_terminate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_terminate(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_thread_time_slice.c b/common_smp/src/tx_thread_time_slice.c
index e48f68a65..8a45ab30e 100644
--- a/common_smp/src/tx_thread_time_slice.c
+++ b/common_smp/src/tx_thread_time_slice.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,12 +65,6 @@
/* */
/* _tx_timer_interrupt Timer interrupt handling */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_time_slice(VOID)
{
diff --git a/common_smp/src/tx_thread_time_slice_change.c b/common_smp/src/tx_thread_time_slice_change.c
index ba4f523c9..b2204857c 100644
--- a/common_smp/src/tx_thread_time_slice_change.c
+++ b/common_smp/src/tx_thread_time_slice_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_time_slice_change(TX_THREAD *thread_ptr, ULONG new_time_slice, ULONG *old_time_slice)
{
diff --git a/common_smp/src/tx_thread_timeout.c b/common_smp/src/tx_thread_timeout.c
index 33ea53522..21b62e344 100644
--- a/common_smp/src/tx_thread_timeout.c
+++ b/common_smp/src/tx_thread_timeout.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* _tx_timer_expiration_process Timer expiration function */
/* _tx_timer_thread_entry Timer thread function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_timeout(ULONG timeout_input)
{
diff --git a/common_smp/src/tx_thread_wait_abort.c b/common_smp/src/tx_thread_wait_abort.c
index 372a72b29..24bce69b3 100644
--- a/common_smp/src/tx_thread_wait_abort.c
+++ b/common_smp/src/tx_thread_wait_abort.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,17 +64,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 03-08-2023 Scott Larson Check if thread is coming out */
-/* of suspension elsewhere, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
UINT _tx_thread_wait_abort(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/tx_time_get.c b/common_smp/src/tx_time_get.c
index 163611420..6ed7d731d 100644
--- a/common_smp/src/tx_time_get.c
+++ b/common_smp/src/tx_time_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,16 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 12-31-2020 Andres Mlinar Modified comment(s), */
-/* resulting in version 6.1.3 */
-/* */
/**************************************************************************/
ULONG _tx_time_get(VOID)
{
diff --git a/common_smp/src/tx_time_set.c b/common_smp/src/tx_time_set.c
index 613274ac2..97b429860 100644
--- a/common_smp/src/tx_time_set.c
+++ b/common_smp/src/tx_time_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_time_set(ULONG new_time)
{
diff --git a/common_smp/src/tx_timer_activate.c b/common_smp/src/tx_timer_activate.c
index d8609573c..5a59eade1 100644
--- a/common_smp/src/tx_timer_activate.c
+++ b/common_smp/src/tx_timer_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_activate(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/tx_timer_change.c b/common_smp/src/tx_timer_change.c
index 420ff26a9..24661d3d0 100644
--- a/common_smp/src/tx_timer_change.c
+++ b/common_smp/src/tx_timer_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
{
diff --git a/common_smp/src/tx_timer_create.c b/common_smp/src/tx_timer_create.c
index 7666724f1..73fa67cd6 100644
--- a/common_smp/src/tx_timer_create.c
+++ b/common_smp/src/tx_timer_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr,
VOID (*expiration_function)(ULONG id), ULONG expiration_input,
diff --git a/common_smp/src/tx_timer_deactivate.c b/common_smp/src/tx_timer_deactivate.c
index 97c786bf1..98eacd4b1 100644
--- a/common_smp/src/tx_timer_deactivate.c
+++ b/common_smp/src/tx_timer_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_deactivate(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/tx_timer_delete.c b/common_smp/src/tx_timer_delete.c
index 7baef6d4c..60d425ec5 100644
--- a/common_smp/src/tx_timer_delete.c
+++ b/common_smp/src/tx_timer_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_delete(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/tx_timer_expiration_process.c b/common_smp/src/tx_timer_expiration_process.c
index f30c2d525..f54e982d8 100644
--- a/common_smp/src/tx_timer_expiration_process.c
+++ b/common_smp/src/tx_timer_expiration_process.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* _tx_timer_interrupt Timer interrupt handler */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_expiration_process(VOID)
{
diff --git a/common_smp/src/tx_timer_info_get.c b/common_smp/src/tx_timer_info_get.c
index ca04c4eaf..31c801f9b 100644
--- a/common_smp/src/tx_timer_info_get.c
+++ b/common_smp/src/tx_timer_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_info_get(TX_TIMER *timer_ptr, CHAR **name, UINT *active, ULONG *remaining_ticks,
ULONG *reschedule_ticks, TX_TIMER **next_timer)
diff --git a/common_smp/src/tx_timer_initialize.c b/common_smp/src/tx_timer_initialize.c
index 89a159261..327f2a652 100644
--- a/common_smp/src/tx_timer_initialize.c
+++ b/common_smp/src/tx_timer_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -199,12 +200,6 @@ ULONG _tx_timer_time_slice[TX_THREAD_SMP_MAX_CORES];
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_initialize(VOID)
{
diff --git a/common_smp/src/tx_timer_performance_info_get.c b/common_smp/src/tx_timer_performance_info_get.c
index 05e332c1c..37cacee45 100644
--- a/common_smp/src/tx_timer_performance_info_get.c
+++ b/common_smp/src/tx_timer_performance_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_info_get(TX_TIMER *timer_ptr, ULONG *activates, ULONG *reactivates,
ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
diff --git a/common_smp/src/tx_timer_performance_system_info_get.c b/common_smp/src/tx_timer_performance_system_info_get.c
index 367e11490..9b6c38620 100644
--- a/common_smp/src/tx_timer_performance_system_info_get.c
+++ b/common_smp/src/tx_timer_performance_system_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_performance_system_info_get(ULONG *activates, ULONG *reactivates,
ULONG *deactivates, ULONG *expirations, ULONG *expiration_adjusts)
diff --git a/common_smp/src/tx_timer_smp_core_exclude.c b/common_smp/src/tx_timer_smp_core_exclude.c
index 8600967ff..9048c1e52 100644
--- a/common_smp/src/tx_timer_smp_core_exclude.c
+++ b/common_smp/src/tx_timer_smp_core_exclude.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_smp_core_exclude(TX_TIMER *timer_ptr, ULONG exclusion_map)
{
diff --git a/common_smp/src/tx_timer_smp_core_exclude_get.c b/common_smp/src/tx_timer_smp_core_exclude_get.c
index 52d5022f9..0092e7730 100644
--- a/common_smp/src/tx_timer_smp_core_exclude_get.c
+++ b/common_smp/src/tx_timer_smp_core_exclude_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_timer_smp_core_exclude_get(TX_TIMER *timer_ptr, ULONG *exclusion_map_ptr)
{
diff --git a/common_smp/src/tx_timer_system_activate.c b/common_smp/src/tx_timer_system_activate.c
index a27e85364..51cd107bb 100644
--- a/common_smp/src/tx_timer_system_activate.c
+++ b/common_smp/src/tx_timer_system_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* _tx_timer_thread_entry Timer thread processing */
/* _tx_timer_activate Application timer activate */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_system_activate(TX_TIMER_INTERNAL *timer_ptr)
{
diff --git a/common_smp/src/tx_timer_system_deactivate.c b/common_smp/src/tx_timer_system_deactivate.c
index 487ead9da..ae9550776 100644
--- a/common_smp/src/tx_timer_system_deactivate.c
+++ b/common_smp/src/tx_timer_system_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* _tx_thread_system_resume Thread resume function */
/* _tx_timer_thread_entry Timer thread processing */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_timer_system_deactivate(TX_TIMER_INTERNAL *timer_ptr)
{
diff --git a/common_smp/src/tx_timer_thread_entry.c b/common_smp/src/tx_timer_thread_entry.c
index e8709c752..51b165b23 100644
--- a/common_smp/src/tx_timer_thread_entry.c
+++ b/common_smp/src/tx_timer_thread_entry.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,12 +66,6 @@
/* */
/* ThreadX Scheduler */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_TIMER_PROCESS_IN_ISR
VOID _tx_timer_thread_entry(ULONG timer_thread_input)
diff --git a/common_smp/src/tx_trace_buffer_full_notify.c b/common_smp/src/tx_trace_buffer_full_notify.c
index 9e07c0a31..7253e8a47 100644
--- a/common_smp/src/tx_trace_buffer_full_notify.c
+++ b/common_smp/src/tx_trace_buffer_full_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_buffer_full_notify(VOID (*full_buffer_callback)(VOID *buffer))
{
diff --git a/common_smp/src/tx_trace_disable.c b/common_smp/src/tx_trace_disable.c
index 1ef211e00..96c287407 100644
--- a/common_smp/src/tx_trace_disable.c
+++ b/common_smp/src/tx_trace_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_disable(VOID)
{
diff --git a/common_smp/src/tx_trace_enable.c b/common_smp/src/tx_trace_enable.c
index aa372e8da..2fb1252c9 100644
--- a/common_smp/src/tx_trace_enable.c
+++ b/common_smp/src/tx_trace_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,14 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_enable(VOID *trace_buffer_start, ULONG trace_buffer_size, ULONG registry_entries)
{
diff --git a/common_smp/src/tx_trace_event_filter.c b/common_smp/src/tx_trace_event_filter.c
index 3afb8ed5c..9caf18ae7 100644
--- a/common_smp/src/tx_trace_event_filter.c
+++ b/common_smp/src/tx_trace_event_filter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_filter(ULONG event_filter_bits)
{
diff --git a/common_smp/src/tx_trace_event_unfilter.c b/common_smp/src/tx_trace_event_unfilter.c
index f9d054d78..652e4143c 100644
--- a/common_smp/src/tx_trace_event_unfilter.c
+++ b/common_smp/src/tx_trace_event_unfilter.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_event_unfilter(ULONG event_unfilter_bits)
{
diff --git a/common_smp/src/tx_trace_initialize.c b/common_smp/src/tx_trace_initialize.c
index 14877b9cb..5cec8eae2 100644
--- a/common_smp/src/tx_trace_initialize.c
+++ b/common_smp/src/tx_trace_initialize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -125,14 +126,6 @@ ULONG _tx_trace_registry_search_start;
/* */
/* _tx_initialize_high_level High level initialization */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_initialize(VOID)
{
diff --git a/common_smp/src/tx_trace_interrupt_control.c b/common_smp/src/tx_trace_interrupt_control.c
index 595dff77d..2e35c62d7 100644
--- a/common_smp/src/tx_trace_interrupt_control.c
+++ b/common_smp/src/tx_trace_interrupt_control.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_interrupt_control(UINT new_posture)
{
diff --git a/common_smp/src/tx_trace_isr_enter_insert.c b/common_smp/src/tx_trace_isr_enter_insert.c
index 628cc8fff..f9971cf22 100644
--- a/common_smp/src/tx_trace_isr_enter_insert.c
+++ b/common_smp/src/tx_trace_isr_enter_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_enter_insert(ULONG isr_id)
{
diff --git a/common_smp/src/tx_trace_isr_exit_insert.c b/common_smp/src/tx_trace_isr_exit_insert.c
index 0d743c19e..a4a8ade88 100644
--- a/common_smp/src/tx_trace_isr_exit_insert.c
+++ b/common_smp/src/tx_trace_isr_exit_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_isr_exit_insert(ULONG isr_id)
{
diff --git a/common_smp/src/tx_trace_object_register.c b/common_smp/src/tx_trace_object_register.c
index 0805063de..f7cd4a4a1 100644
--- a/common_smp/src/tx_trace_object_register.c
+++ b/common_smp/src/tx_trace_object_register.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,17 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* 07-29-2022 Scott Larson Modified comment(s), */
-/* check for null name, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
VOID _tx_trace_object_register(UCHAR object_type, VOID *object_ptr, CHAR *object_name, ULONG parameter_1, ULONG parameter_2)
{
diff --git a/common_smp/src/tx_trace_object_unregister.c b/common_smp/src/tx_trace_object_unregister.c
index a7fef275e..2166c9734 100644
--- a/common_smp/src/tx_trace_object_unregister.c
+++ b/common_smp/src/tx_trace_object_unregister.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_trace_object_unregister(VOID *object_ptr)
{
diff --git a/common_smp/src/tx_trace_user_event_insert.c b/common_smp/src/tx_trace_user_event_insert.c
index fda096106..787a55f0a 100644
--- a/common_smp/src/tx_trace_user_event_insert.c
+++ b/common_smp/src/tx_trace_user_event_insert.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _tx_trace_user_event_insert(ULONG event_id, ULONG info_field_1, ULONG info_field_2, ULONG info_field_3, ULONG info_field_4)
{
diff --git a/common_smp/src/txe_block_allocate.c b/common_smp/src/txe_block_allocate.c
index 5564354bd..c9c7a1a84 100644
--- a/common_smp/src/txe_block_allocate.c
+++ b/common_smp/src/txe_block_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_allocate(TX_BLOCK_POOL *pool_ptr, VOID **block_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_block_pool_create.c b/common_smp/src/txe_block_pool_create.c
index 8cbeadbde..08ef7e69d 100644
--- a/common_smp/src/txe_block_pool_create.c
+++ b/common_smp/src/txe_block_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_create(TX_BLOCK_POOL *pool_ptr, CHAR *name_ptr, ULONG block_size,
VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
diff --git a/common_smp/src/txe_block_pool_delete.c b/common_smp/src/txe_block_pool_delete.c
index 844ff57a6..f9af71cb5 100644
--- a/common_smp/src/txe_block_pool_delete.c
+++ b/common_smp/src/txe_block_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_delete(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_smp/src/txe_block_pool_info_get.c b/common_smp/src/txe_block_pool_info_get.c
index 77d9df4a4..f91ca2060 100644
--- a/common_smp/src/txe_block_pool_info_get.c
+++ b/common_smp/src/txe_block_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_info_get(TX_BLOCK_POOL *pool_ptr, CHAR **name, ULONG *available_blocks,
ULONG *total_blocks, TX_THREAD **first_suspended,
diff --git a/common_smp/src/txe_block_pool_prioritize.c b/common_smp/src/txe_block_pool_prioritize.c
index 593ac6dc6..877420112 100644
--- a/common_smp/src/txe_block_pool_prioritize.c
+++ b/common_smp/src/txe_block_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_pool_prioritize(TX_BLOCK_POOL *pool_ptr)
{
diff --git a/common_smp/src/txe_block_release.c b/common_smp/src/txe_block_release.c
index e7eaed249..ba63d0b63 100644
--- a/common_smp/src/txe_block_release.c
+++ b/common_smp/src/txe_block_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_block_release(VOID *block_ptr)
{
diff --git a/common_smp/src/txe_byte_allocate.c b/common_smp/src/txe_byte_allocate.c
index dbb3937e7..dacbede9d 100644
--- a/common_smp/src/txe_byte_allocate.c
+++ b/common_smp/src/txe_byte_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_allocate(TX_BYTE_POOL *pool_ptr, VOID **memory_ptr,
ULONG memory_size, ULONG wait_option)
diff --git a/common_smp/src/txe_byte_pool_create.c b/common_smp/src/txe_byte_pool_create.c
index 2f37d0637..99a896981 100644
--- a/common_smp/src/txe_byte_pool_create.c
+++ b/common_smp/src/txe_byte_pool_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_create(TX_BYTE_POOL *pool_ptr, CHAR *name_ptr, VOID *pool_start, ULONG pool_size, UINT pool_control_block_size)
{
diff --git a/common_smp/src/txe_byte_pool_delete.c b/common_smp/src/txe_byte_pool_delete.c
index 2a6baad26..6bbeb8f0f 100644
--- a/common_smp/src/txe_byte_pool_delete.c
+++ b/common_smp/src/txe_byte_pool_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_delete(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_smp/src/txe_byte_pool_info_get.c b/common_smp/src/txe_byte_pool_info_get.c
index 0a7536ef7..85e7a233a 100644
--- a/common_smp/src/txe_byte_pool_info_get.c
+++ b/common_smp/src/txe_byte_pool_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_info_get(TX_BYTE_POOL *pool_ptr, CHAR **name, ULONG *available_bytes,
ULONG *fragments, TX_THREAD **first_suspended,
diff --git a/common_smp/src/txe_byte_pool_prioritize.c b/common_smp/src/txe_byte_pool_prioritize.c
index a0f0f1aef..9acec73c9 100644
--- a/common_smp/src/txe_byte_pool_prioritize.c
+++ b/common_smp/src/txe_byte_pool_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_pool_prioritize(TX_BYTE_POOL *pool_ptr)
{
diff --git a/common_smp/src/txe_byte_release.c b/common_smp/src/txe_byte_release.c
index 67f91907d..89c3a82bd 100644
--- a/common_smp/src/txe_byte_release.c
+++ b/common_smp/src/txe_byte_release.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_byte_release(VOID *memory_ptr)
{
diff --git a/common_smp/src/txe_event_flags_create.c b/common_smp/src/txe_event_flags_create.c
index 4c71bd952..4e3fed773 100644
--- a/common_smp/src/txe_event_flags_create.c
+++ b/common_smp/src/txe_event_flags_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr, UINT event_control_block_size)
{
diff --git a/common_smp/src/txe_event_flags_delete.c b/common_smp/src/txe_event_flags_delete.c
index 660662767..23c048077 100644
--- a/common_smp/src/txe_event_flags_delete.c
+++ b/common_smp/src/txe_event_flags_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_delete(TX_EVENT_FLAGS_GROUP *group_ptr)
{
diff --git a/common_smp/src/txe_event_flags_get.c b/common_smp/src/txe_event_flags_get.c
index 237676301..1e9c6e0cb 100644
--- a/common_smp/src/txe_event_flags_get.c
+++ b/common_smp/src/txe_event_flags_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,14 +72,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG requested_flags,
UINT get_option, ULONG *actual_flags_ptr, ULONG wait_option)
diff --git a/common_smp/src/txe_event_flags_info_get.c b/common_smp/src/txe_event_flags_info_get.c
index 3400c55e0..e551d025c 100644
--- a/common_smp/src/txe_event_flags_info_get.c
+++ b/common_smp/src/txe_event_flags_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_info_get(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR **name, ULONG *current_flags,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/txe_event_flags_set.c b/common_smp/src/txe_event_flags_set.c
index 03d309ab3..4df57fad1 100644
--- a/common_smp/src/txe_event_flags_set.c
+++ b/common_smp/src/txe_event_flags_set.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr, ULONG flags_to_set, UINT set_option)
{
diff --git a/common_smp/src/txe_event_flags_set_notify.c b/common_smp/src/txe_event_flags_set_notify.c
index f93963d3b..51887fd75 100644
--- a/common_smp/src/txe_event_flags_set_notify.c
+++ b/common_smp/src/txe_event_flags_set_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_event_flags_set_notify(TX_EVENT_FLAGS_GROUP *group_ptr, VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr))
{
diff --git a/common_smp/src/txe_mutex_create.c b/common_smp/src/txe_mutex_create.c
index fb65a5bee..392f8b0ed 100644
--- a/common_smp/src/txe_mutex_create.c
+++ b/common_smp/src/txe_mutex_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_create(TX_MUTEX *mutex_ptr, CHAR *name_ptr, UINT inherit, UINT mutex_control_block_size)
{
diff --git a/common_smp/src/txe_mutex_delete.c b/common_smp/src/txe_mutex_delete.c
index b2a3fd2b6..3692bf898 100644
--- a/common_smp/src/txe_mutex_delete.c
+++ b/common_smp/src/txe_mutex_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_delete(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/txe_mutex_get.c b/common_smp/src/txe_mutex_get.c
index 7ef04eef2..2d457c82b 100644
--- a/common_smp/src/txe_mutex_get.c
+++ b/common_smp/src/txe_mutex_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_get(TX_MUTEX *mutex_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_mutex_info_get.c b/common_smp/src/txe_mutex_info_get.c
index 826fead1f..f4ef4168c 100644
--- a/common_smp/src/txe_mutex_info_get.c
+++ b/common_smp/src/txe_mutex_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,14 +70,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_info_get(TX_MUTEX *mutex_ptr, CHAR **name, ULONG *count, TX_THREAD **owner,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/txe_mutex_prioritize.c b/common_smp/src/txe_mutex_prioritize.c
index 9ae4b868f..d3302c1c5 100644
--- a/common_smp/src/txe_mutex_prioritize.c
+++ b/common_smp/src/txe_mutex_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_prioritize(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/txe_mutex_put.c b/common_smp/src/txe_mutex_put.c
index 85d5929fc..8a085b7bb 100644
--- a/common_smp/src/txe_mutex_put.c
+++ b/common_smp/src/txe_mutex_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_mutex_put(TX_MUTEX *mutex_ptr)
{
diff --git a/common_smp/src/txe_queue_create.c b/common_smp/src/txe_queue_create.c
index 82a7b53c7..387eacb66 100644
--- a/common_smp/src/txe_queue_create.c
+++ b/common_smp/src/txe_queue_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,14 +71,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_create(TX_QUEUE *queue_ptr, CHAR *name_ptr, UINT message_size,
VOID *queue_start, ULONG queue_size, UINT queue_control_block_size)
diff --git a/common_smp/src/txe_queue_delete.c b/common_smp/src/txe_queue_delete.c
index 3062edebd..43dc9d6f6 100644
--- a/common_smp/src/txe_queue_delete.c
+++ b/common_smp/src/txe_queue_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_delete(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/txe_queue_flush.c b/common_smp/src/txe_queue_flush.c
index 348de23e5..b514db958 100644
--- a/common_smp/src/txe_queue_flush.c
+++ b/common_smp/src/txe_queue_flush.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_flush(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/txe_queue_front_send.c b/common_smp/src/txe_queue_front_send.c
index 21c254abf..798aada67 100644
--- a/common_smp/src/txe_queue_front_send.c
+++ b/common_smp/src/txe_queue_front_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_front_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_queue_info_get.c b/common_smp/src/txe_queue_info_get.c
index b4507b01b..78d983924 100644
--- a/common_smp/src/txe_queue_info_get.c
+++ b/common_smp/src/txe_queue_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_info_get(TX_QUEUE *queue_ptr, CHAR **name, ULONG *enqueued, ULONG *available_storage,
TX_THREAD **first_suspended, ULONG *suspended_count, TX_QUEUE **next_queue)
diff --git a/common_smp/src/txe_queue_prioritize.c b/common_smp/src/txe_queue_prioritize.c
index f74809a14..ba40b02ab 100644
--- a/common_smp/src/txe_queue_prioritize.c
+++ b/common_smp/src/txe_queue_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_prioritize(TX_QUEUE *queue_ptr)
{
diff --git a/common_smp/src/txe_queue_receive.c b/common_smp/src/txe_queue_receive.c
index b40e6a561..de6f4dcdd 100644
--- a/common_smp/src/txe_queue_receive.c
+++ b/common_smp/src/txe_queue_receive.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_queue_send.c b/common_smp/src/txe_queue_send.c
index 5873f025c..1b752e75f 100644
--- a/common_smp/src/txe_queue_send.c
+++ b/common_smp/src/txe_queue_send.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_queue_send_notify.c b/common_smp/src/txe_queue_send_notify.c
index 9ffb0a93d..dd2beaf24 100644
--- a/common_smp/src/txe_queue_send_notify.c
+++ b/common_smp/src/txe_queue_send_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_queue_send_notify(TX_QUEUE *queue_ptr, VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr))
{
diff --git a/common_smp/src/txe_semaphore_ceiling_put.c b/common_smp/src/txe_semaphore_ceiling_put.c
index 51fee9d73..4c8b4603a 100644
--- a/common_smp/src/txe_semaphore_ceiling_put.c
+++ b/common_smp/src/txe_semaphore_ceiling_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_ceiling_put(TX_SEMAPHORE *semaphore_ptr, ULONG ceiling)
{
diff --git a/common_smp/src/txe_semaphore_create.c b/common_smp/src/txe_semaphore_create.c
index 3390491c6..a190b03c0 100644
--- a/common_smp/src/txe_semaphore_create.c
+++ b/common_smp/src/txe_semaphore_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_create(TX_SEMAPHORE *semaphore_ptr, CHAR *name_ptr, ULONG initial_count, UINT semaphore_control_block_size)
{
diff --git a/common_smp/src/txe_semaphore_delete.c b/common_smp/src/txe_semaphore_delete.c
index 2083a22af..3d9f366c2 100644
--- a/common_smp/src/txe_semaphore_delete.c
+++ b/common_smp/src/txe_semaphore_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_delete(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/txe_semaphore_get.c b/common_smp/src/txe_semaphore_get.c
index 403d43b42..7b92d317f 100644
--- a/common_smp/src/txe_semaphore_get.c
+++ b/common_smp/src/txe_semaphore_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,14 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_get(TX_SEMAPHORE *semaphore_ptr, ULONG wait_option)
{
diff --git a/common_smp/src/txe_semaphore_info_get.c b/common_smp/src/txe_semaphore_info_get.c
index 142bad377..7695028e4 100644
--- a/common_smp/src/txe_semaphore_info_get.c
+++ b/common_smp/src/txe_semaphore_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,14 +69,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_info_get(TX_SEMAPHORE *semaphore_ptr, CHAR **name, ULONG *current_value,
TX_THREAD **first_suspended, ULONG *suspended_count,
diff --git a/common_smp/src/txe_semaphore_prioritize.c b/common_smp/src/txe_semaphore_prioritize.c
index 52525ded3..cd873c5a9 100644
--- a/common_smp/src/txe_semaphore_prioritize.c
+++ b/common_smp/src/txe_semaphore_prioritize.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_prioritize(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/txe_semaphore_put.c b/common_smp/src/txe_semaphore_put.c
index 4a26fbd8c..452c39bd3 100644
--- a/common_smp/src/txe_semaphore_put.c
+++ b/common_smp/src/txe_semaphore_put.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put(TX_SEMAPHORE *semaphore_ptr)
{
diff --git a/common_smp/src/txe_semaphore_put_notify.c b/common_smp/src/txe_semaphore_put_notify.c
index 646c293af..33aa8d9ae 100644
--- a/common_smp/src/txe_semaphore_put_notify.c
+++ b/common_smp/src/txe_semaphore_put_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_semaphore_put_notify(TX_SEMAPHORE *semaphore_ptr, VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr))
{
diff --git a/common_smp/src/txe_thread_create.c b/common_smp/src/txe_thread_create.c
index c3902cd15..d319bc9e2 100644
--- a/common_smp/src/txe_thread_create.c
+++ b/common_smp/src/txe_thread_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,14 +78,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
VOID (*entry_function)(ULONG id), ULONG entry_input,
diff --git a/common_smp/src/txe_thread_delete.c b/common_smp/src/txe_thread_delete.c
index 6e2d1d2bd..85cf31cac 100644
--- a/common_smp/src/txe_thread_delete.c
+++ b/common_smp/src/txe_thread_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_delete(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_thread_entry_exit_notify.c b/common_smp/src/txe_thread_entry_exit_notify.c
index ab4e835d2..334206839 100644
--- a/common_smp/src/txe_thread_entry_exit_notify.c
+++ b/common_smp/src/txe_thread_entry_exit_notify.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_entry_exit_notify(TX_THREAD *thread_ptr, VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT type))
{
diff --git a/common_smp/src/txe_thread_info_get.c b/common_smp/src/txe_thread_info_get.c
index 17f9155db..ad1db3f7f 100644
--- a/common_smp/src/txe_thread_info_get.c
+++ b/common_smp/src/txe_thread_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_info_get(TX_THREAD *thread_ptr, CHAR **name, UINT *state, ULONG *run_count,
UINT *priority, UINT *preemption_threshold, ULONG *time_slice,
diff --git a/common_smp/src/txe_thread_preemption_change.c b/common_smp/src/txe_thread_preemption_change.c
index c0cfa91ef..e3de0a858 100644
--- a/common_smp/src/txe_thread_preemption_change.c
+++ b/common_smp/src/txe_thread_preemption_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_preemption_change(TX_THREAD *thread_ptr, UINT new_threshold, UINT *old_threshold)
{
diff --git a/common_smp/src/txe_thread_priority_change.c b/common_smp/src/txe_thread_priority_change.c
index b4a1224b5..2bf0058bd 100644
--- a/common_smp/src/txe_thread_priority_change.c
+++ b/common_smp/src/txe_thread_priority_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_priority_change(TX_THREAD *thread_ptr, UINT new_priority, UINT *old_priority)
{
diff --git a/common_smp/src/txe_thread_relinquish.c b/common_smp/src/txe_thread_relinquish.c
index 1c5ab21a1..080bad47a 100644
--- a/common_smp/src/txe_thread_relinquish.c
+++ b/common_smp/src/txe_thread_relinquish.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
VOID _txe_thread_relinquish(VOID)
{
diff --git a/common_smp/src/txe_thread_reset.c b/common_smp/src/txe_thread_reset.c
index 4fed5e7aa..1815f5bbd 100644
--- a/common_smp/src/txe_thread_reset.c
+++ b/common_smp/src/txe_thread_reset.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_reset(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_thread_resume.c b/common_smp/src/txe_thread_resume.c
index e8a341ddf..ae356c6c1 100644
--- a/common_smp/src/txe_thread_resume.c
+++ b/common_smp/src/txe_thread_resume.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_resume(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_thread_suspend.c b/common_smp/src/txe_thread_suspend.c
index 951d35eb1..dab42db71 100644
--- a/common_smp/src/txe_thread_suspend.c
+++ b/common_smp/src/txe_thread_suspend.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_suspend(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_thread_terminate.c b/common_smp/src/txe_thread_terminate.c
index aa54501c7..8e1f18f5c 100644
--- a/common_smp/src/txe_thread_terminate.c
+++ b/common_smp/src/txe_thread_terminate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_terminate(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_thread_time_slice_change.c b/common_smp/src/txe_thread_time_slice_change.c
index d01137d83..456dbb2a6 100644
--- a/common_smp/src/txe_thread_time_slice_change.c
+++ b/common_smp/src/txe_thread_time_slice_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -64,14 +65,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_time_slice_change(TX_THREAD *thread_ptr, ULONG new_time_slice, ULONG *old_time_slice)
{
diff --git a/common_smp/src/txe_thread_wait_abort.c b/common_smp/src/txe_thread_wait_abort.c
index 8132c597a..086fb33bc 100644
--- a/common_smp/src/txe_thread_wait_abort.c
+++ b/common_smp/src/txe_thread_wait_abort.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* Application code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_wait_abort(TX_THREAD *thread_ptr)
{
diff --git a/common_smp/src/txe_timer_activate.c b/common_smp/src/txe_timer_activate.c
index 9bd623414..094eda851 100644
--- a/common_smp/src/txe_timer_activate.c
+++ b/common_smp/src/txe_timer_activate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_activate(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/txe_timer_change.c b/common_smp/src/txe_timer_change.c
index 70a7ed0da..ef503ffa8 100644
--- a/common_smp/src/txe_timer_change.c
+++ b/common_smp/src/txe_timer_change.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,14 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
{
diff --git a/common_smp/src/txe_timer_create.c b/common_smp/src/txe_timer_create.c
index 553418bf2..02cf7c1aa 100644
--- a/common_smp/src/txe_timer_create.c
+++ b/common_smp/src/txe_timer_create.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,14 +73,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr,
VOID (*expiration_function)(ULONG id), ULONG expiration_input,
diff --git a/common_smp/src/txe_timer_deactivate.c b/common_smp/src/txe_timer_deactivate.c
index a5736919b..d44ba67ba 100644
--- a/common_smp/src/txe_timer_deactivate.c
+++ b/common_smp/src/txe_timer_deactivate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_deactivate(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/txe_timer_delete.c b/common_smp/src/txe_timer_delete.c
index 3a1bf33c5..e94ba4d64 100644
--- a/common_smp/src/txe_timer_delete.c
+++ b/common_smp/src/txe_timer_delete.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,14 +63,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_delete(TX_TIMER *timer_ptr)
{
diff --git a/common_smp/src/txe_timer_info_get.c b/common_smp/src/txe_timer_info_get.c
index a227f1374..16ac5f64a 100644
--- a/common_smp/src/txe_timer_info_get.c
+++ b/common_smp/src/txe_timer_info_get.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,14 +68,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 Yuxin Zhou Modified comment(s), */
-/* resulting in version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_timer_info_get(TX_TIMER *timer_ptr, CHAR **name, UINT *active, ULONG *remaining_ticks,
ULONG *reschedule_ticks, TX_TIMER **next_timer)
diff --git a/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.c b/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.c
index 5a03f35ce..6ce6e0d43 100644
--- a/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.c
+++ b/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -82,41 +82,41 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.cmd b/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.cmd
index 78dc1f6e0..2f72e8656 100644
--- a/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.cmd
+++ b/ports/arc_em/metaware/example_build/sample_threadx/sample_threadx.cmd
@@ -1,24 +1,24 @@
//
// This is the linker script example (SRV3-style).
// (c) Synopsys, 2013
-//
+//
//
-//number of exceptions and interrupts
+//number of exceptions and interrupts
NUMBER_OF_EXCEPTIONS = 16;//it is fixed (16)
NUMBER_OF_INTERRUPTS = 5;//depends on HW configuration
//define Interrupt Vector Table size
IVT_SIZE_ITEMS = (NUMBER_OF_EXCEPTIONS + NUMBER_OF_INTERRUPTS);//the total IVT size (in "items")
-IVT_SIZE_BYTES = IVT_SIZE_ITEMS * 4;//in bytes
+IVT_SIZE_BYTES = IVT_SIZE_ITEMS * 4;//in bytes
//define ICCM and DCCM locations
MEMORY {
ICCM: ORIGIN = 0x00000000, LENGTH = 128K
DCCM: ORIGIN = 0x80000000, LENGTH = 128K
}
-
-//define sections and groups
+
+//define sections and groups
SECTIONS {
GROUP: {
.ivt (TEXT) : # Interrupt table
@@ -26,18 +26,18 @@ SECTIONS {
___ivt1 = .;
* (.ivt)
___ivt2 = .;
- // Make the IVT at least IVT_SIZE_BYTES
+ // Make the IVT at least IVT_SIZE_BYTES
. += (___ivt2 - ___ivt1 < IVT_SIZE_BYTES) ? (IVT_SIZE_BYTES - (___ivt2 - ___ivt1)) : 0;
}
.ivh (TEXT) : // Interrupt handlers
-
+
//TEXT sections
.text? : { *('.text$crt*') }
* (TEXT): {}
//Literals
* (LIT): {}
} > ICCM
-
+
GROUP: {
//data sections
.sdata?: {}
diff --git a/ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s b/ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s
index cf55e8dbd..07da08990 100644
--- a/ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s
+++ b/ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -88,20 +88,6 @@ _tx_system_stack_base_address:
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), optimized*/
-;/* system stack usage, */
-;/* resulting in version 6.1.9 */
-;/* 01-31-2022 Andres Mlinar Modified comments(s), */
-;/* initialize interrupts right */
-;/* before enabling the task */
-;/* scheduler, */
-;/* resulting in version 6.1.10 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/arc_em/metaware/example_build/sample_threadx/vectors.s b/ports/arc_em/metaware/example_build/sample_threadx/vectors.s
index c6cbc893f..eeb9ba2ad 100644
--- a/ports/arc_em/metaware/example_build/sample_threadx/vectors.s
+++ b/ports/arc_em/metaware/example_build/sample_threadx/vectors.s
@@ -1,4 +1,4 @@
-
+
.file "vectors.s"
.section .ivt,text
;; This directive forces this section to stay resident even if stripped out by the -zpurgetext linker option
diff --git a/ports/arc_em/metaware/inc/tx_port.h b/ports/arc_em/metaware/inc/tx_port.h
index 63c90b6e0..34ca80196 100644
--- a/ports/arc_em/metaware/inc/tx_port.h
+++ b/ports/arc_em/metaware/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,29 +43,15 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s), updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 01-31-2022 Andres Mlinar Modified comments(s), */
-/* initialize interrupts right */
-/* before enabling the task */
-/* scheduler, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
#define TX_PORT_H
-/* Remove volatile for ThreadX source on the ARC. This is because the ARC
- compiler generates different non-cache r/w access when using volatile
- that is different from the assembly language access of the same
+/* Remove volatile for ThreadX source on the ARC. This is because the ARC
+ compiler generates different non-cache r/w access when using volatile
+ that is different from the assembly language access of the same
global variables in ThreadX. */
#ifdef TX_SOURCE_CODE
@@ -89,7 +76,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -102,7 +89,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -138,8 +125,8 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 2048 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -149,8 +136,8 @@ typedef unsigned short USHORT;
#define TX_INT_DISABLE_MASK 0x00000000 /* Disable all interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -195,7 +182,7 @@ void _tx_initialize_start_interrupts(void);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION _tx_initialize_start_interrupts();
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -209,15 +196,15 @@ void _tx_initialize_start_interrupts(void);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
#define TX_THREAD_EXTENSION_0 VOID *__mw_threadx_tls; \
int __mw_errnum; \
VOID (*__mw_thread_exit)(struct TX_THREAD_STRUCT *);
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -231,11 +218,11 @@ void _tx_initialize_start_interrupts(void);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -244,16 +231,16 @@ void _tx_initialize_start_interrupts(void);
#if __HIGHC__
-/* The MetaWare thread safe C/C++ runtime library needs space to
+/* The MetaWare thread safe C/C++ runtime library needs space to
store thread specific information. In addition, a function pointer
- is also supplied so that certain thread-specific resources may be
+ is also supplied so that certain thread-specific resources may be
released upon thread termination and/or thread completion. */
#define TX_THREAD_CREATE_EXTENSION(thread_ptr) \
thread_ptr -> __mw_threadx_tls = 0; \
thread_ptr -> __mw_errnum = 0; \
- thread_ptr -> __mw_thread_exit = TX_NULL;
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+ thread_ptr -> __mw_thread_exit = TX_NULL;
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr) \
if (thread_ptr -> __mw_thread_exit) \
(thread_ptr -> __mw_thread_exit) (thread_ptr);
@@ -263,10 +250,10 @@ void _tx_initialize_start_interrupts(void);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
-#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
-#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
#endif
@@ -293,9 +280,9 @@ void _tx_initialize_start_interrupts(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -320,8 +307,8 @@ void _tx_initialize_start_interrupts(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARCv2_EM/MetaWare Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARCv2_EM/MetaWare Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/arc_em/metaware/readme_threadx.txt b/ports/arc_em/metaware/readme_threadx.txt
index d622eeecf..d14f78659 100644
--- a/ports/arc_em/metaware/readme_threadx.txt
+++ b/ports/arc_em/metaware/readme_threadx.txt
@@ -2,70 +2,70 @@
Using the MetaWare Tools
-1. Open the Eclipse ThreadX RTOS Workspace
+1. Open the Eclipse ThreadX RTOS Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Eclipse ThreadX RTOS Workspace, which is located inside the "example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Eclipse ThreadX RTOS Workspace, which is located inside the "example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the ThreadX library project
-file "tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply select the ThreadX library project
+file "tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
3. Demonstration System
The ThreadX demonstration is designed to execute under the MetaWare ARCv2 EM
-simulation. The instructions that follow describe how to get the ThreadX
-demonstration running.
+simulation. The instructions that follow describe how to get the ThreadX
+demonstration running.
-Building the demonstration is easy; simply select the demonstration project file
-"sample_threadx." At this point, select the build button and observe the
-compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the demonstration project file
+"sample_threadx." At this point, select the build button and observe the
+compilation, assembly, and linkage of the ThreadX demonstration application.
After the demonstration is built, click on the "Debug" button and it will
automatically launch a pre-configured connection to the ARCv2 EM simulator.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. System Initialization
-The system entry point using the MetaWare tools is at the label _start.
-This is defined within the crt1.s file supplied by MetaWare. In addition,
+The system entry point using the MetaWare tools is at the label _start.
+This is defined within the crt1.s file supplied by MetaWare. In addition,
this is where all static and global preset C variable initialization
processing is called from.
After the MetaWare startup function completes, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.s. This function is
-responsible for setting up various system data structures, and interrupt
+is located in the file tx_initialize_low_level.s. This function is
+responsible for setting up various system data structures, and interrupt
vectors.
-By default free memory is assumed to start at the section .free_memory
-which is referenced in tx_initialize_low_level.s and located in the
-linker control file after all the linker defined RAM addresses. This is
+By default free memory is assumed to start at the section .free_memory
+which is referenced in tx_initialize_low_level.s and located in the
+linker control file after all the linker defined RAM addresses. This is
the address passed to the application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The ARC compiler assumes that registers r0-r12 are scratch registers for
-each function. All other registers used by a C function must be preserved
-by the function. ThreadX takes advantage of this in situations where a
-context switch happens as a result of making a ThreadX service call (which
-is itself a C function). In such cases, the saved context of a thread is
+The ARC compiler assumes that registers r0-r12 are scratch registers for
+each function. All other registers used by a C function must be preserved
+by the function. ThreadX takes advantage of this in situations where a
+context switch happens as a result of making a ThreadX service call (which
+is itself a C function). In such cases, the saved context of a thread is
only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -114,20 +114,20 @@ associated thread control block TX_THREAD.
0x9C bta
0xA0 point of interrupt
0xA4 STATUS32
-
+
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat
-file to remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat
+file to remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
@@ -142,25 +142,25 @@ _tx_interrupt_x:
st blink, [sp, 16] ; Save blink (blink must be saved before _tx_thread_context_save)
bl _tx_thread_context_save ; Save interrupt context
;
-; /* Application ISR processing goes here! Your ISR can be written in
+; /* Application ISR processing goes here! Your ISR can be written in
; assembly language or in C. If it is written in C, you must allocate
-; 16 bytes of stack space before it is called. This must also be
-; recovered once your C ISR return. An example of this is shown below.
+; 16 bytes of stack space before it is called. This must also be
+; recovered once your C ISR return. An example of this is shown below.
;
; If the ISR is written in assembly language, only the compiler scratch
-; registers are available for use without saving/restoring (r0-r12).
+; registers are available for use without saving/restoring (r0-r12).
; If use of additional registers are required they must be saved and
; restored. */
;
bl.d your_ISR_written_in_C ; Call an ISR written in C
sub sp, sp, 16 ; Allocate stack space (delay slot)
add sp, sp, 16 ; Recover stack space
-
+
;
b _tx_thread_context_restore ; Restore interrupt context
-The application handles interrupts directly, which necessitates all register
+The application handles interrupts directly, which necessitates all register
preservation by the application's ISR. ISRs that do not use the ThreadX
_tx_thread_context_save and _tx_thread_context_restore routines are not
allowed access to the ThreadX API. In addition, custom application ISRs
@@ -169,28 +169,28 @@ should be higher priority than all ThreadX-managed ISRs.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
By default, the ThreadX timer interrupt is mapped to the ARCv2 EM auxiliary
timer 0, which generates low priority interrupts on interrupt vector 16.
-It is easy to change the timer interrupt source and priority by changing the
+It is easy to change the timer interrupt source and priority by changing the
setup code in tx_initialize_low_level.s.
9. Hardware Stack Checking
ThreadX optionally supports the ARCv2 EM hardware stack checking feature. When enabled,
-the KSTACK_TOP and KSTACK_BASE registers are loaded with the stack top/bottom before
+the KSTACK_TOP and KSTACK_BASE registers are loaded with the stack top/bottom before
each thread's execution. In addition, the SC bit of STATUS32 is set to enable the stack
checking feature. During initialization, idle, or interrupt processing, the hardware
stack checking on the system stack is performed, when enabled.
To enable ThreadX support for hardware stack checking, simply build the ThreadX library
and application assembly code with TX_ENABLE_HW_STACK_CHECKING defined. This will enable
-the stack checking logic in ThreadX.
+the stack checking logic in ThreadX.
For the system stack checking to function properly, there are two sections that must
be located around the .stack section, which defines the system stack location and size.
@@ -198,8 +198,8 @@ The new sections are .stack_top and .stack_base. The .stack_top section should b
immediately BEFORE the .stack section and .stack_base should be placed immediately AFTER
the .stack section. Please see the sample_threadx.cmd linker control file for an example.
-When/if a stack exception occurs, the hardware will fetch the _tx_ev_protection_viol
-exception defined in tx_initialize_low_level.s. Processing for this exception is
+When/if a stack exception occurs, the hardware will fetch the _tx_ev_protection_viol
+exception defined in tx_initialize_low_level.s. Processing for this exception is
application specific.
@@ -215,12 +215,12 @@ information associated with this specific port of ThreadX:
tx_thread_context_restore.s r25/r30 are caller saved
tx_thread_context_save.s r25/r30 are caller saved
tx_thread_interrupt_control.s Modified comments
- tx_thread_schedule.s fixed interrupt priority overwritting bug,
+ tx_thread_schedule.s fixed interrupt priority overwritting bug,
and fixed hardware stack checker disable and reenable logic
tx_thread_stack_build.s Modified comments
tx_thread_system_return.s Modified comments
tx_timer_interrupt.s remove unneeded load of _tx_thread_preempt_disable
-
+
09-30-2020 Initial ThreadX 6.1 for ARCv2 EM using MetaWare tools.
diff --git a/ports/arc_em/metaware/src/tx_thread_context_restore.s b/ports/arc_em/metaware/src/tx_thread_context_restore.s
index 7e1bb8bbe..e39c3e2f7 100644
--- a/ports/arc_em/metaware/src/tx_thread_context_restore.s
+++ b/ports/arc_em/metaware/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -59,22 +59,6 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comment(s), and */
-;/* r25/r30 are caller saved, */
-;/* resulting in version 6.1.6 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), added */
-;/* support for disabling the */
-;/* loop control feature, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
diff --git a/ports/arc_em/metaware/src/tx_thread_context_save.s b/ports/arc_em/metaware/src/tx_thread_context_save.s
index 57013da21..fb2a280c4 100644
--- a/ports/arc_em/metaware/src/tx_thread_context_save.s
+++ b/ports/arc_em/metaware/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -58,18 +58,6 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comment(s), and */
-;/* r25/r30 are caller saved, */
-;/* resulting in version 6.1.6 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
diff --git a/ports/arc_em/metaware/src/tx_thread_interrupt_control.s b/ports/arc_em/metaware/src/tx_thread_interrupt_control.s
index 6cca4ec72..b6d26148c 100644
--- a/ports/arc_em/metaware/src/tx_thread_interrupt_control.s
+++ b/ports/arc_em/metaware/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -52,17 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comments, */
-;/* resulting in version 6.1.6 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/arc_em/metaware/src/tx_thread_schedule.s b/ports/arc_em/metaware/src/tx_thread_schedule.s
index 583adae1e..0e1a035cc 100644
--- a/ports/arc_em/metaware/src/tx_thread_schedule.s
+++ b/ports/arc_em/metaware/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -60,23 +60,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comment(s), and */
-;/* fixed interrupt priority */
-;/* overwritting bug, and */
-;/* fixed hardware stack checker*/
-;/* disable and reenable logic, */
-;/* resulting in version 6.1.6 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), added */
-;/* support for disabling the */
-;/* loop control feature, */
-;/* improved internal logic, */
-;/* resulting in version 6.1.9 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
diff --git a/ports/arc_em/metaware/src/tx_thread_stack_build.s b/ports/arc_em/metaware/src/tx_thread_stack_build.s
index 9eaf86b59..3fc2e0e56 100644
--- a/ports/arc_em/metaware/src/tx_thread_stack_build.s
+++ b/ports/arc_em/metaware/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -57,17 +57,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comments, */
-;/* resulting in version 6.1.6 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/arc_em/metaware/src/tx_thread_system_return.s b/ports/arc_em/metaware/src/tx_thread_system_return.s
index b08e87da7..83321a455 100644
--- a/ports/arc_em/metaware/src/tx_thread_system_return.s
+++ b/ports/arc_em/metaware/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -58,20 +58,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comments, */
-;/* resulting in version 6.1.6 */
-;/* 10-15-2021 Andres Mlinar Modified comments, */
-;/* use schedule reenter, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/arc_em/metaware/src/tx_timer_interrupt.s b/ports/arc_em/metaware/src/tx_timer_interrupt.s
index 003260a84..30941cb0e 100644
--- a/ports/arc_em/metaware/src/tx_timer_interrupt.s
+++ b/ports/arc_em/metaware/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -58,23 +58,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 12-31-2020 Scott Larson Modified comment(s), remove */
-;/* unneeded load of */
-;/* _tx_thread_preempt_disable, */
-;/* resulting in version 6.1.3 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), and */
-;/* fixed possible race */
-;/* condition on preemption */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.c b/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.c
index 81cca72bf..6ce6e0d43 100644
--- a/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.c
+++ b/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,40 +83,40 @@ CHAR *pointer = TX_NULL;
/* Create the main thread. */
tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.cmd b/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.cmd
index 78dc1f6e0..2f72e8656 100644
--- a/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.cmd
+++ b/ports/arc_hs/metaware/example_build/sample_threadx/sample_threadx.cmd
@@ -1,24 +1,24 @@
//
// This is the linker script example (SRV3-style).
// (c) Synopsys, 2013
-//
+//
//
-//number of exceptions and interrupts
+//number of exceptions and interrupts
NUMBER_OF_EXCEPTIONS = 16;//it is fixed (16)
NUMBER_OF_INTERRUPTS = 5;//depends on HW configuration
//define Interrupt Vector Table size
IVT_SIZE_ITEMS = (NUMBER_OF_EXCEPTIONS + NUMBER_OF_INTERRUPTS);//the total IVT size (in "items")
-IVT_SIZE_BYTES = IVT_SIZE_ITEMS * 4;//in bytes
+IVT_SIZE_BYTES = IVT_SIZE_ITEMS * 4;//in bytes
//define ICCM and DCCM locations
MEMORY {
ICCM: ORIGIN = 0x00000000, LENGTH = 128K
DCCM: ORIGIN = 0x80000000, LENGTH = 128K
}
-
-//define sections and groups
+
+//define sections and groups
SECTIONS {
GROUP: {
.ivt (TEXT) : # Interrupt table
@@ -26,18 +26,18 @@ SECTIONS {
___ivt1 = .;
* (.ivt)
___ivt2 = .;
- // Make the IVT at least IVT_SIZE_BYTES
+ // Make the IVT at least IVT_SIZE_BYTES
. += (___ivt2 - ___ivt1 < IVT_SIZE_BYTES) ? (IVT_SIZE_BYTES - (___ivt2 - ___ivt1)) : 0;
}
.ivh (TEXT) : // Interrupt handlers
-
+
//TEXT sections
.text? : { *('.text$crt*') }
* (TEXT): {}
//Literals
* (LIT): {}
} > ICCM
-
+
GROUP: {
//data sections
.sdata?: {}
diff --git a/ports/arc_hs/metaware/example_build/sample_threadx/tx_initialize_low_level.s b/ports/arc_hs/metaware/example_build/sample_threadx/tx_initialize_low_level.s
index 56ef58401..9d5833707 100644
--- a/ports/arc_hs/metaware/example_build/sample_threadx/tx_initialize_low_level.s
+++ b/ports/arc_hs/metaware/example_build/sample_threadx/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -67,20 +67,6 @@ _tx_first_free_address:
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), optimized*/
-;/* system stack usage, */
-;/* resulting in version 6.1.9 */
-;/* 01-31-2022 Andres Mlinar Modified comments(s), */
-;/* initialize interrupts right */
-;/* before enabling the task */
-;/* scheduler, */
-;/* resulting in version 6.1.10 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/arc_hs/metaware/example_build/sample_threadx/vectors.s b/ports/arc_hs/metaware/example_build/sample_threadx/vectors.s
index c6cbc893f..eeb9ba2ad 100644
--- a/ports/arc_hs/metaware/example_build/sample_threadx/vectors.s
+++ b/ports/arc_hs/metaware/example_build/sample_threadx/vectors.s
@@ -1,4 +1,4 @@
-
+
.file "vectors.s"
.section .ivt,text
;; This directive forces this section to stay resident even if stripped out by the -zpurgetext linker option
diff --git a/ports/arc_hs/metaware/inc/tx_port.h b/ports/arc_hs/metaware/inc/tx_port.h
index 1400ded71..7c5dc6de9 100644
--- a/ports/arc_hs/metaware/inc/tx_port.h
+++ b/ports/arc_hs/metaware/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,29 +43,15 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s), updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 01-31-2022 Andres Mlinar Modified comments(s), */
-/* initialize interrupts right */
-/* before enabling the task */
-/* scheduler, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
#define TX_PORT_H
-/* Remove volatile for ThreadX source on the ARC. This is because the ARC
- compiler generates different non-cache r/w access when using volatile
- that is different from the assembly language access of the same
+/* Remove volatile for ThreadX source on the ARC. This is because the ARC
+ compiler generates different non-cache r/w access when using volatile
+ that is different from the assembly language access of the same
global variables in ThreadX. */
#ifdef TX_SOURCE_CODE
@@ -89,7 +76,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -102,7 +89,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -138,8 +125,8 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 2048 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -149,8 +136,8 @@ typedef unsigned short USHORT;
#define TX_INT_DISABLE_MASK 0x00000000 /* Disable all interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -195,7 +182,7 @@ void _tx_initialize_start_interrupts(void);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION _tx_initialize_start_interrupts();
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -209,15 +196,15 @@ void _tx_initialize_start_interrupts(void);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
#define TX_THREAD_EXTENSION_0 VOID *__mw_threadx_tls; \
int __mw_errnum; \
VOID (*__mw_thread_exit)(struct TX_THREAD_STRUCT *);
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -231,11 +218,11 @@ void _tx_initialize_start_interrupts(void);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -244,16 +231,16 @@ void _tx_initialize_start_interrupts(void);
#if __HIGHC__
-/* The MetaWare thread safe C/C++ runtime library needs space to
+/* The MetaWare thread safe C/C++ runtime library needs space to
store thread specific information. In addition, a function pointer
- is also supplied so that certain thread-specific resources may be
+ is also supplied so that certain thread-specific resources may be
released upon thread termination and/or thread completion. */
#define TX_THREAD_CREATE_EXTENSION(thread_ptr) \
thread_ptr -> __mw_threadx_tls = 0; \
thread_ptr -> __mw_errnum = 0; \
- thread_ptr -> __mw_thread_exit = TX_NULL;
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+ thread_ptr -> __mw_thread_exit = TX_NULL;
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr) \
if (thread_ptr -> __mw_thread_exit) \
(thread_ptr -> __mw_thread_exit) (thread_ptr);
@@ -263,10 +250,10 @@ void _tx_initialize_start_interrupts(void);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
-#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
-#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
#endif
@@ -293,9 +280,9 @@ void _tx_initialize_start_interrupts(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -334,8 +321,8 @@ VOID tx_thread_register_bank_assign(VOID *thread_ptr, UINT register_bank);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARC_HS/MetaWare Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARC_HS/MetaWare Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/arc_hs/metaware/readme_threadx.txt b/ports/arc_hs/metaware/readme_threadx.txt
index c763b850f..506d89cc7 100644
--- a/ports/arc_hs/metaware/readme_threadx.txt
+++ b/ports/arc_hs/metaware/readme_threadx.txt
@@ -2,70 +2,70 @@
Using the MetaWare Tools
-1. Open the Azure RTOS Workspace
+1. Open the Azure RTOS Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace, which is located inside the "example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace, which is located inside the "example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the ThreadX library project
-file "tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply select the ThreadX library project
+file "tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
3. Demonstration System
The ThreadX demonstration is designed to execute under the MetaWare ARC HS
-simulation. The instructions that follow describe how to get the ThreadX
-demonstration running.
+simulation. The instructions that follow describe how to get the ThreadX
+demonstration running.
-Building the demonstration is easy; simply select the demonstration project file
-"sample_threadx." At this point, select the build button and observe the
-compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the demonstration project file
+"sample_threadx." At this point, select the build button and observe the
+compilation, assembly, and linkage of the ThreadX demonstration application.
After the demonstration is built, click on the "Debug" button and it will
automatically launch a pre-configured connection to the ARC HS simulator.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. System Initialization
-The system entry point using the MetaWare tools is at the label _start.
-This is defined within the crt1.s file supplied by MetaWare. In addition,
+The system entry point using the MetaWare tools is at the label _start.
+This is defined within the crt1.s file supplied by MetaWare. In addition,
this is where all static and global preset C variable initialization
processing is called from.
After the MetaWare startup function completes, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.s. This function is
-responsible for setting up various system data structures, and interrupt
+is located in the file tx_initialize_low_level.s. This function is
+responsible for setting up various system data structures, and interrupt
vectors.
-By default free memory is assumed to start at the section .free_memory
-which is referenced in tx_initialize_low_level.s and located in the
-linker control file after all the linker defined RAM addresses. This is
+By default free memory is assumed to start at the section .free_memory
+which is referenced in tx_initialize_low_level.s and located in the
+linker control file after all the linker defined RAM addresses. This is
the address passed to the application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The ARC compiler assumes that registers r0-r12 are scratch registers for
-each function. All other registers used by a C function must be preserved
-by the function. ThreadX takes advantage of this in situations where a
-context switch happens as a result of making a ThreadX service call (which
-is itself a C function). In such cases, the saved context of a thread is
+The ARC compiler assumes that registers r0-r12 are scratch registers for
+each function. All other registers used by a C function must be preserved
+by the function. ThreadX takes advantage of this in situations where a
+context switch happens as a result of making a ThreadX service call (which
+is itself a C function). In such cases, the saved context of a thread is
only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -114,26 +114,26 @@ associated thread control block TX_THREAD.
0x9C bta
0xA0 point of interrupt
0xA4 STATUS32
-
+
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat
-file to remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat
+file to remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for the
-ARC HS processor, including support for software interrupts and fast
+ARC HS processor, including support for software interrupts and fast
hardware interrupts.
7.1 Software Interrupt Handling
@@ -147,25 +147,25 @@ _tx_interrupt_x:
st blink, [sp, 16] ; Save blink (blink must be saved before _tx_thread_context_save)
bl _tx_thread_context_save ; Save interrupt context
;
-; /* Application ISR processing goes here! Your ISR can be written in
+; /* Application ISR processing goes here! Your ISR can be written in
; assembly language or in C. If it is written in C, you must allocate
-; 16 bytes of stack space before it is called. This must also be
-; recovered once your C ISR return. An example of this is shown below.
+; 16 bytes of stack space before it is called. This must also be
+; recovered once your C ISR return. An example of this is shown below.
;
; If the ISR is written in assembly language, only the compiler scratch
-; registers are available for use without saving/restoring (r0-r12).
+; registers are available for use without saving/restoring (r0-r12).
; If use of additional registers are required they must be saved and
; restored. */
;
bl.d your_ISR_written_in_C ; Call an ISR written in C
sub sp, sp, 16 ; Allocate stack space (delay slot)
add sp, sp, 16 ; Recover stack space
-
+
;
b _tx_thread_context_restore ; Restore interrupt context
-The application handles interrupts directly, which necessitates all register
+The application handles interrupts directly, which necessitates all register
preservation by the application's ISR. ISRs that do not use the ThreadX
_tx_thread_context_save and _tx_thread_context_restore routines are not
allowed access to the ThreadX API. In addition, custom application ISRs
@@ -173,11 +173,11 @@ should be higher priority than all ThreadX-managed ISRs.
7.2 Fast Interrupt Handling
-ThreadX supports the ARC HS fast interrupt processing. It is assumed that
+ThreadX supports the ARC HS fast interrupt processing. It is assumed that
multiple register banks are available and the ARC HS processor automatically
-uses register bank 1 as the fast interrupt register bank.
+uses register bank 1 as the fast interrupt register bank.
-In order to use fast interrupts with register bank 1, the interrupt desired
+In order to use fast interrupts with register bank 1, the interrupt desired
must have priority 0 and the application must call the following ThreadX API
to setup register bank 1:
@@ -190,7 +190,7 @@ look like:
tx_initialize_fast_interrupt_setup(&fast_interrupt_stack[1020]);
-As for the fast interrupt ISR, the following template should be used for
+As for the fast interrupt ISR, the following template should be used for
ARC HS fast interrupts managed by ThreadX:
.global _tx_fast_interrupt_x
@@ -207,28 +207,28 @@ _tx_fast_interrupt_x:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
By default, the ThreadX timer interrupt is mapped to the ARC HS auxiliary
timer 0, which generates low priority interrupts on interrupt vector 16.
-It is easy to change the timer interrupt source and priority by changing the
+It is easy to change the timer interrupt source and priority by changing the
setup code in tx_initialize_low_level.s.
9. Thread Hardware Register Bank Context
-ThreadX supports the use of hardware register banks on the ARC HS. A hardware
-register bank may be associated with a specific application thread via the
+ThreadX supports the use of hardware register banks on the ARC HS. A hardware
+register bank may be associated with a specific application thread via the
following API:
void tx_thread_register_bank_assign(TX_THREAD *thread_ptr, register_bank);
This API is assumed to be called from initialization (interrupts are locked out
-and execution is from register bank 0) and after the specified thread has been
-created. This API assumes the register bank number is correct, i.e., a valid
+and execution is from register bank 0) and after the specified thread has been
+created. This API assumes the register bank number is correct, i.e., a valid
register bank greater than 0 and one that hasn't been used for another thread.
Note: if fast interrupts are used, register bank 1 must also not be used. In this
diff --git a/ports/arc_hs/metaware/src/tx_initialize_fast_interrupt_setup.s b/ports/arc_hs/metaware/src/tx_initialize_fast_interrupt_setup.s
index c4aa71147..c757508b5 100644
--- a/ports/arc_hs/metaware/src/tx_initialize_fast_interrupt_setup.s
+++ b/ports/arc_hs/metaware/src/tx_initialize_fast_interrupt_setup.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -22,10 +22,10 @@
#include "tx_user.h"
#endif
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
;/* _tx_initialize_fast_interrupt_setup ARC_HS/MetaWare */
;/* 6.2.1 */
;/* AUTHOR */
@@ -33,35 +33,26 @@
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function initializes register bank 1 for fast interrupt use. */
-;/* The initialization includes setting the stack pointer to the value */
-;/* supplied by the caller. */
-;/* */
-;/* INPUT */
-;/* */
+;/* */
+;/* This function initializes register bank 1 for fast interrupt use. */
+;/* The initialization includes setting the stack pointer to the value */
+;/* supplied by the caller. */
+;/* */
+;/* INPUT */
+;/* */
;/* stack_ptr Pointer to stack for bank 1 */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
+;/* CALLED BY */
+;/* */
+;/* Application */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_fast_interrupt_setup(VOID *stack_ptr)
@@ -71,7 +62,7 @@
_tx_initialize_fast_interrupt_setup:
;
; /* Assume this routine is being called from initialization, with interrupts
-; disabled and from register bank 0. Also assume that the stack pointer
+; disabled and from register bank 0. Also assume that the stack pointer
; input is valid, i.e., there is no error checking on the validity of
; register_bank. */
;
diff --git a/ports/arc_hs/metaware/src/tx_thread_context_fast_restore.s b/ports/arc_hs/metaware/src/tx_thread_context_fast_restore.s
index 089f13de5..d2f5284cf 100644
--- a/ports/arc_hs/metaware/src/tx_thread_context_fast_restore.s
+++ b/ports/arc_hs/metaware/src/tx_thread_context_fast_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -23,11 +23,11 @@
#endif
.equ BTA, 0x412
-
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
+
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
;/* _tx_thread_context_fast_restore ARC_HS/MetaWare */
;/* 6.2.1 */
;/* AUTHOR */
@@ -35,43 +35,34 @@
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fast interrupt context, which can be a */
-;/* nesting condition on a non-fast ISR, an idle system restore, a */
-;/* restore of an interrupted thread, and a preemption of an interrupted*/
-;/* thread. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
+;/* This function restores the fast interrupt context, which can be a */
+;/* nesting condition on a non-fast ISR, an idle system restore, a */
+;/* restore of an interrupted thread, and a preemption of an interrupted*/
+;/* thread. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_fast_restore(VOID)
;{
.global _tx_thread_context_fast_restore
- .type _tx_thread_context_fast_restore, @function
+ .type _tx_thread_context_fast_restore, @function
_tx_thread_context_fast_restore:
;
; /* Note: it is assumed that the stack pointer is in the same position now as
@@ -98,7 +89,7 @@ _tx_thread_context_fast_restore:
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
@@ -160,7 +151,7 @@ __tx_thread_preempt_restore:
st r0, [sp, 132] ; Temporarily save r0
mov r0, 3 ; Build hardware interrupt stack type
st r0, [sp, 0] ; Setup interrupt stack type
-
+
.ifndef TX_DISABLE_LP
lr r0, [LP_START] ; Pickup LP_START
st r0, [sp, 4] ; Save LP_START
@@ -186,7 +177,7 @@ __tx_thread_preempt_restore:
kflag ilink ; Move back to register bank 0
b __tx_preempt_save_done ; Done, finished with preemption save
-__tx_software_interrupt_context:
+__tx_software_interrupt_context:
st ilink, [sp, 0] ; Save ilink (point of interrupt)
st r3, [sp, 4] ; Save status32
mov ilink, sp ; Pass the information back to the other register bank via ilink
@@ -223,7 +214,7 @@ __tx_software_interrupt_context:
st r1, [sp, 128] ; Save r1
st r0, [sp, 132] ; Save r0
st r30, [sp, 136] ; Save r30
-
+
.ifndef TX_DISABLE_LP
lr r10, [LP_START] ; Pickup LP_START
lr r9, [LP_END] ; Pickup LP_END
diff --git a/ports/arc_hs/metaware/src/tx_thread_context_fast_save.s b/ports/arc_hs/metaware/src/tx_thread_context_fast_save.s
index d9a80463e..f54176d44 100644
--- a/ports/arc_hs/metaware/src/tx_thread_context_fast_save.s
+++ b/ports/arc_hs/metaware/src/tx_thread_context_fast_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -22,10 +22,10 @@
#include "tx_user.h"
#endif
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
;/* _tx_thread_context_fast_save ARC_HS/MetaWare */
;/* 6.2.1 */
;/* AUTHOR */
@@ -33,46 +33,37 @@
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of fast interrupt processing. The function assumes that */
-;/* fast interrupts are enabled (priority 0) and multiple register */
-;/* banks are available. In this case, register bank 1 is reserved by */
-;/* hardware for fast interrupts. Additional assumptions include that */
-;/* there will be no nested fast interrupts and the LP_START, LP_END, */
-;/* and LP_COUNT registers are not used in the application's fast */
-;/* interrupt ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of fast interrupt processing. The function assumes that */
+;/* fast interrupts are enabled (priority 0) and multiple register */
+;/* banks are available. In this case, register bank 1 is reserved by */
+;/* hardware for fast interrupts. Additional assumptions include that */
+;/* there will be no nested fast interrupts and the LP_START, LP_END, */
+;/* and LP_COUNT registers are not used in the application's fast */
+;/* interrupt ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_fast_save(VOID)
;{
.global _tx_thread_context_fast_save
- .type _tx_thread_context_fast_save, @function
+ .type _tx_thread_context_fast_save, @function
_tx_thread_context_fast_save:
;
; /* Increment nested interrupt count. */
diff --git a/ports/arc_hs/metaware/src/tx_thread_context_restore.s b/ports/arc_hs/metaware/src/tx_thread_context_restore.s
index 79a786c57..23d675a8d 100644
--- a/ports/arc_hs/metaware/src/tx_thread_context_restore.s
+++ b/ports/arc_hs/metaware/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -56,19 +56,6 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), and */
-;/* r25/r30 are caller saved, */
-;/* use schedule_reenter, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
@@ -249,7 +236,7 @@ __tx_thread_preempt_restore:
b __tx_preempt_save_done ; Done, finished with preemption save
nop
-__tx_software_interrupt_context:
+__tx_software_interrupt_context:
mov r6, 1 ; Build interrupt stack type
st r6, [r7, 0] ; Setup interrupt stack type
st fp, [r7, 24] ; Save fp
diff --git a/ports/arc_hs/metaware/src/tx_thread_context_save.s b/ports/arc_hs/metaware/src/tx_thread_context_save.s
index 9fcc82e65..27ee25b52 100644
--- a/ports/arc_hs/metaware/src/tx_thread_context_save.s
+++ b/ports/arc_hs/metaware/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -55,18 +55,6 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), and */
-;/* r25/r30 are caller saved, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
diff --git a/ports/arc_hs/metaware/src/tx_thread_interrupt_control.s b/ports/arc_hs/metaware/src/tx_thread_interrupt_control.s
index 9d3dacae6..3d18b9a19 100644
--- a/ports/arc_hs/metaware/src/tx_thread_interrupt_control.s
+++ b/ports/arc_hs/metaware/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -52,17 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comments, */
-;/* resulting in version 6.1.6 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/arc_hs/metaware/src/tx_thread_register_bank_assign.s b/ports/arc_hs/metaware/src/tx_thread_register_bank_assign.s
index 7b9d11144..f9876c89a 100644
--- a/ports/arc_hs/metaware/src/tx_thread_register_bank_assign.s
+++ b/ports/arc_hs/metaware/src/tx_thread_register_bank_assign.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -22,10 +22,10 @@
#include "tx_user.h"
#endif
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
;/* _tx_thread_register_bank_assign ARC_HS/MetaWare */
;/* 6.2.1 */
;/* AUTHOR */
@@ -33,37 +33,28 @@
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* register_bank Register bank number */
-;/* (1 through max-1) */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* (1 through max-1) */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
+;/* CALLED BY */
+;/* */
+;/* Application */
;/* */
;/**************************************************************************/
;VOID _tx_thread_register_bank_assign(VOID *thread_ptr, UINT register_bank)
@@ -75,9 +66,9 @@ _tx_thread_register_bank_assign:
; /* Assume this routine is being called from initialization, with interrupts
; disabled and from register bank 0. Also assume that the thread pointer and
; register bank input is valid, i.e., there is no error checking on the validity of
-; the thread pointer or the register_bank.
+; the thread pointer or the register_bank.
;
-; It is worth noting that if fast interrupts are being used, register bank 1
+; It is worth noting that if fast interrupts are being used, register bank 1
; is reserved for the fast interrupt processing, so thread register bank assignments
; should begin at bank 2. */
;
@@ -101,7 +92,7 @@ _tx_thread_register_bank_assign:
bclr r3, r3, 17 ;
bclr r3, r3, 18 ;
kflag r3 ; Move back to register bank 0
- mov r5, 3 ; Build type for hardware interrupt context
+ mov r5, 3 ; Build type for hardware interrupt context
j_s.d [blink] ; Return to caller
st r5, [r4, 0] ; Set stack frame type
;}
diff --git a/ports/arc_hs/metaware/src/tx_thread_schedule.s b/ports/arc_hs/metaware/src/tx_thread_schedule.s
index 954ec3717..2651cb48a 100644
--- a/ports/arc_hs/metaware/src/tx_thread_schedule.s
+++ b/ports/arc_hs/metaware/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -57,18 +57,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comment(s), */
-;/* use schedule reenter, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
@@ -149,11 +137,11 @@ __tx_thread_schedule_loop:
ld r2, [sp, 4] ; Pickup status32
kflag r2 ; Enter the proper register bank
ld r3, [sp, 8] ; Pickup the saved interrupt posture
- add sp, sp, 12 ; Recover small stack frame
- j_s.d [blink] ; Return to thread and restore flags
+ add sp, sp, 12 ; Recover small stack frame
+ j_s.d [blink] ; Return to thread and restore flags
seti r3 ; Recover STATUS32
-__tx_hw_interrupt_restore:
+__tx_hw_interrupt_restore:
mov r0, 0x2 ; Pretend level 1 interrupt is returning
sr r0, [AUX_IRQ_ACT] ;
@@ -163,10 +151,10 @@ __tx_hw_interrupt_restore:
sr r0, [LP_START] ; Restore LP_START
ld r1, [sp, 8] ; Recover LP_END
sr r1, [LP_END] ; Restore LP_END
- ld r2, [sp, 12] ; Recover LP_COUNT
+ ld r2, [sp, 12] ; Recover LP_COUNT
mov LP_COUNT, r2
.endif
-
+
.ifdef TX_ENABLE_ACC
ld r58, [sp, 140] ; Recover r58
ld r59, [sp, 144] ; Recover r59
@@ -180,7 +168,7 @@ __tx_hw_interrupt_restore:
kflag r0 ; Switch to the proper register bank
add sp, sp, 160 ; Recover the interrupt stack frame
rtie ; Return to point of interrupt
-
+
__tx_restore_non_hw_context:
;
; /* Determine if an interrupt frame or a synchronous task suspension frame
diff --git a/ports/arc_hs/metaware/src/tx_thread_stack_build.s b/ports/arc_hs/metaware/src/tx_thread_stack_build.s
index 8ef5dc98f..db4becfc3 100644
--- a/ports/arc_hs/metaware/src/tx_thread_stack_build.s
+++ b/ports/arc_hs/metaware/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -57,17 +57,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 04-02-2021 Andres Mlinar Modified comments, */
-;/* resulting in version 6.1.6 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/arc_hs/metaware/src/tx_thread_system_return.s b/ports/arc_hs/metaware/src/tx_thread_system_return.s
index aec09bb45..453682e4f 100644
--- a/ports/arc_hs/metaware/src/tx_thread_system_return.s
+++ b/ports/arc_hs/metaware/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -54,18 +54,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 Andres Mlinar Modified comments, */
-;/* use schedule reenter, */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
@@ -87,7 +75,7 @@ _tx_thread_system_return:
mov r4, 2 ; Build solicited hardward stack frame type
st r4, [sp, 0] ; Set stack frame type
st r3, [sp, 4] ; Save status32
- st r2, [sp, 8] ; Save interrupt posture
+ st r2, [sp, 8] ; Save interrupt posture
st sp, [r0, 8] ; Save thread's stack pointer
bclr r3, r3, 16 ; Build register bank 0 value
bclr r3, r3, 17 ;
@@ -120,7 +108,7 @@ __tx_software_context:
st r30, [sp, 72] ; Save r30
st sp, [r0, 8] ; Save thread's stack pointer
__tx_save_done:
-;
+;
.ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
diff --git a/ports/arc_hs/metaware/src/tx_timer_interrupt.s b/ports/arc_hs/metaware/src/tx_timer_interrupt.s
index 59410fdc0..6f6aa521c 100644
--- a/ports/arc_hs/metaware/src/tx_timer_interrupt.s
+++ b/ports/arc_hs/metaware/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
@@ -58,23 +58,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 12-31-2020 Scott Larson Modified comment(s), remove */
-;/* unneeded load of */
-;/* _tx_thread_preempt_disable, */
-;/* resulting in version 6.1.3 */
-;/* 10-15-2021 Yuxin Zhou Modified comment(s), and */
-;/* fixed possible race */
-;/* condition on preemption */
-;/* resulting in version 6.1.9 */
-;/* 03-08-2023 Cindy Deng Modified comment(s), added */
-;/* #include tx_user.h, */
-;/* resulting in version 6.2.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/arm11/ac5/example_build/sample_threadx.c b/ports/arm11/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/arm11/ac5/example_build/sample_threadx.c
+++ b/ports/arm11/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm11/ac5/example_build/tx_initialize_low_level.s b/ports/arm11/ac5/example_build/tx_initialize_low_level.s
index 541ddb1e7..3badfc20f 100644
--- a/ports/arm11/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/arm11/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -41,7 +41,7 @@ SYS_STACK_SIZE EQU 1024 ; SYS stack size (used for neste
IRQ_STACK_SIZE EQU 1024 ; IRQ stack size
;
;
-;/* ARM11 ARMulator Timer and Interrupt controller information. This depends on
+;/* ARM11 ARMulator Timer and Interrupt controller information. This depends on
; the ARMulator's Interrupt Controller and Timer being enabled in the default.ami.
; In addition, the addresses must match those specified in the peripherals.ami file.
; Please refer to section 2.10 and 4.16 of the Debug Target Guide, version 1.2. */
@@ -50,7 +50,7 @@ IRQStatus EQU 0x0a000000 ; IRQ Status Register
IRQRawStatus EQU 0x0a000004 ; IRQ Raw Status Register
IRQEnable EQU 0x0a000008 ; IRQ Enable Set Register
IRQEnableClear EQU 0x0a00000C ; IRQ Enable Clear Register
-IRQSoft EQU 0x0a000010 ; IRQ Soft
+IRQSoft EQU 0x0a000010 ; IRQ Soft
FIQStatus EQU 0x0a000100 ; FIQ Status Register
FIQRawStatus EQU 0x0a000104 ; FIQ Raw Status Register
FIQEnable EQU 0x0a000108 ; FIQ Enable Set Register
@@ -113,45 +113,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -202,7 +196,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -238,7 +232,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -290,7 +284,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -298,34 +292,34 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
; /* Check for Timer1 interrupts on the ARMulator. */
LDR r1,=IRQStatus ; Pickup address of IRQStatus register
- LDR r2, [r1] ; Read IRQStatus
+ LDR r2, [r1] ; Read IRQStatus
LDR r0,=TIMER1_BIT ; Pickup Timer1 interrupt present bit
AND r2, r2, r0 ; Is this a timer interrupt?
- CMP r2, r0 ;
+ CMP r2, r0 ;
BNE _tx_not_timer_interrupt ; If 0, not a timer interrupt
LDR r1,=Timer1Clear ; Build address of Timer1 clear register
- MOV r0,#0 ;
+ MOV r0,#0 ;
STR r0, [r1] ; Clear timer 0 interrupt
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -335,7 +329,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -351,28 +345,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -381,7 +375,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -403,11 +397,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm11/ac5/inc/tx_port.h b/ports/arm11/ac5/inc/tx_port.h
index eb74538be..b1bf6e363 100644
--- a/ports/arm11/ac5/inc/tx_port.h
+++ b/ports/arm11/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM11/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
-
+
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -318,8 +310,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM11/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM11/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/arm11/ac5/readme_threadx.txt b/ports/arm11/ac5/readme_threadx.txt
index 82a9dfa2c..a89d79b5b 100644
--- a/ports/arm11/ac5/readme_threadx.txt
+++ b/ports/arm11/ac5/readme_threadx.txt
@@ -6,15 +6,15 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -24,39 +24,39 @@ Since there is no ARM11 FVP, there are no instructions here for running
the demonstration; users are expected to run the demonstration on their
platform of choice.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the user's platform of choice.
3. System Initialization
-The entry point in ThreadX for the Cortex-A5 using AC5 tools is at label
+The entry point in ThreadX for the Cortex-A5 using AC5 tools is at label
__main. This is defined within the AC5 compiler's startup code. In addition,
this is where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -72,10 +72,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -86,161 +86,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -258,39 +258,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A5 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -301,12 +301,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -314,7 +314,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -327,7 +327,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -337,12 +337,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -359,22 +359,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -382,10 +382,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -398,12 +398,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -412,7 +412,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -440,18 +440,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -467,7 +467,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -483,28 +483,28 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-A5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/arm11/ac5/src/tx_thread_context_restore.s b/ports/arm11/ac5/src/tx_thread_context_restore.s
index e9dbf9e0b..d7bce36c6 100644
--- a/ports/arm11/ac5/src/tx_thread_context_restore.s
+++ b/ports/arm11/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
THUMB_MASK EQU 0x20 ; Thumb bit mask
SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
@@ -55,44 +55,38 @@ SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -120,13 +114,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/arm11/ac5/src/tx_thread_context_save.s b/ports/arm11/ac5/src/tx_thread_context_save.s
index 8c92eeb1b..aa99af37b 100644
--- a/ports/arm11/ac5/src/tx_thread_context_save.s
+++ b/ports/arm11/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -45,43 +45,37 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -96,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -116,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -132,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -146,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -172,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -182,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -197,7 +191,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s b/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s
index af5169753..41fc0eac0 100644
--- a/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
THUMB_MASK EQU 0x20 ; Thumb bit mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
SVC_MODE_BITS EQU 0x13 ; SVC mode value
@@ -57,44 +57,38 @@ SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +116,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +166,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -219,7 +213,7 @@ __tx_thread_fiq_preempt_restore
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_context_save.s b/ports/arm11/ac5/src/tx_thread_fiq_context_save.s
index 72bebd9db..7aa2c8327 100644
--- a/ports/arm11/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/arm11/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s b/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s
index 66b824227..69faffe04 100644
--- a/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_cxsf, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s b/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s
index fd36e17fb..2bbd33e8b 100644
--- a/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_control.s b/ports/arm11/ac5/src/tx_thread_interrupt_control.s
index 7d3bddaef..e51c993d1 100644
--- a/ports/arm11/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_disable.s b/ports/arm11/ac5/src/tx_thread_interrupt_disable.s
index e2c50cfd2..6224b590f 100644
--- a/ports/arm11/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_restore.s b/ports/arm11/ac5/src/tx_thread_interrupt_restore.s
index ad7fb5d26..a35c06218 100644
--- a/ports/arm11/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s b/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s
index a8ee12ad9..83e93891c 100644
--- a/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_cxsf, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s b/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s
index aea8bbf4b..d658bf1c1 100644
--- a/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/arm11/ac5/src/tx_thread_schedule.s b/ports/arm11/ac5/src/tx_thread_schedule.s
index 176464820..b8bc01e64 100644
--- a/ports/arm11/ac5/src/tx_thread_schedule.s
+++ b/ports/arm11/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -47,45 +47,39 @@ ENABLE_INTS EQU 0x80 ; IRQ Interrupts enabled mask
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -112,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -121,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -135,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/arm11/ac5/src/tx_thread_stack_build.s b/ports/arm11/ac5/src/tx_thread_stack_build.s
index 838213359..64482069a 100644
--- a/ports/arm11/ac5/src/tx_thread_stack_build.s
+++ b/ports/arm11/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,44 +38,38 @@ CPSR_MASK EQU 0x9F ; Mask initial CPSR, IRQ ints en
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -83,10 +77,10 @@ CPSR_MASK EQU 0x9F ; Mask initial CPSR, IRQ ints en
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the ARM11 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/arm11/ac5/src/tx_thread_system_return.s b/ports/arm11/ac5/src/tx_thread_system_return.s
index 82a1e0c40..37ce70665 100644
--- a/ports/arm11/ac5/src/tx_thread_system_return.s
+++ b/ports/arm11/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,50 +40,44 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -96,12 +90,12 @@ _tx_thread_system_return
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
MSR CPSR_cxsf, r2 ; Disable interrupts
-
+
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
diff --git a/ports/arm11/ac5/src/tx_thread_vectored_context_save.s b/ports/arm11/ac5/src/tx_thread_vectored_context_save.s
index e9ae138a0..ca013608c 100644
--- a/ports/arm11/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/arm11/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -45,43 +45,37 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -144,7 +138,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -180,7 +174,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/arm11/ac5/src/tx_timer_interrupt.s b/ports/arm11/ac5/src/tx_timer_interrupt.s
index 9d745e0a7..c5b7ee101 100644
--- a/ports/arm11/ac5/src/tx_timer_interrupt.s
+++ b/ports/arm11/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt ARM11/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM11/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/arm11/gnu/example_build/crt0.S b/ports/arm11/gnu/example_build/crt0.S
index aa0f32396..56b6c9580 100644
--- a/ports/arm11/gnu/example_build/crt0.S
+++ b/ports/arm11/gnu/example_build/crt0.S
@@ -26,13 +26,13 @@ _mainCRTStartup:
mov a2, #0 /* Second arg: fill value */
mov fp, a2 /* Null frame pointer */
mov r7, a2 /* Null frame pointer for Thumb */
-
+
ldr a1, .LC1 /* First arg: start of memory block */
- ldr a3, .LC2
+ ldr a3, .LC2
sub a3, a3, a1 /* Third arg: length of block */
-
-
+
+
bl memset
mov r0, #0 /* no arguments */
mov r1, #0 /* no argv either */
@@ -48,15 +48,15 @@ _mainCRTStartup:
/* bl init */
mov r0, r4
mov r1, r5
-#endif
+#endif
bl main
bl exit /* Should not return. */
-
- /* For Thumb, constants must be after the code since only
+
+ /* For Thumb, constants must be after the code since only
positive offsets are supported for PC relative addresses. */
-
+
.align 0
.LC0:
.LC1:
diff --git a/ports/arm11/gnu/example_build/reset.S b/ports/arm11/gnu/example_build/reset.S
index a11c826a3..5d05258bb 100644
--- a/ports/arm11/gnu/example_build/reset.S
+++ b/ports/arm11/gnu/example_build/reset.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -65,11 +65,11 @@ SWI:
.word __tx_swi_interrupt @ Software interrupt handler
PREFETCH:
.word __tx_prefetch_handler @ Prefetch exception handler
-ABORT:
+ABORT:
.word __tx_abort_handler @ Abort exception handler
-RESERVED:
+RESERVED:
.word __tx_reserved_handler @ Reserved exception handler
-IRQ:
+IRQ:
.word __tx_irq_handler @ IRQ interrupt handler
FIQ:
.word __tx_fiq_handler @ FIQ interrupt handler
diff --git a/ports/arm11/gnu/example_build/sample_threadx.c b/ports/arm11/gnu/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/arm11/gnu/example_build/sample_threadx.c
+++ b/ports/arm11/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm11/gnu/example_build/sample_threadx.ld b/ports/arm11/gnu/example_build/sample_threadx.ld
index 3dea4e1ca..e940b2b88 100644
--- a/ports/arm11/gnu/example_build/sample_threadx.ld
+++ b/ports/arm11/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/arm11/gnu/example_build/tx_initialize_low_level.S b/ports/arm11/gnu/example_build/tx_initialize_low_level.S
index f7c4617a8..887ae4e0b 100644
--- a/ports/arm11/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/arm11/gnu/example_build/tx_initialize_low_level.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -62,7 +62,7 @@ SYS_STACK_SIZE = 1024 @ System stack size
.type $_tx_initialize_low_level,function
$_tx_initialize_low_level:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
@@ -72,45 +72,39 @@ $_tx_initialize_low_level:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_initialize_low_level ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level ARM11/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for any low-level processor */
-@/* initialization, including setting up interrupt vectors, setting */
-@/* up a periodic timer interrupt source, saving the system stack */
-@/* pointer for use in ISR processing later, and finding the first */
-@/* available RAM memory address for tx_application_define. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@@ -125,7 +119,7 @@ _tx_initialize_low_level:
@
LDR r1, =_sp @ Get pointer to stack area
-#ifdef TX_ENABLE_IRQ_NESTING
+#ifdef TX_ENABLE_IRQ_NESTING
@
@ /* Setup the system mode stack for nested interrupt support */
@
@@ -156,7 +150,7 @@ _tx_initialize_low_level:
MSR CPSR, r0 @ Enter SVC mode
LDR r2, =_stack_bottom @ Pickup stack bottom
CMP r3, r2 @ Compare the current stack end with the bottom
-_stack_error_loop:
+_stack_error_loop:
BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
@
@ /* Save the system stack pointer. */
@@ -208,7 +202,7 @@ __tx_reserved_handler:
B __tx_reserved_handler @ Reserved exception handler
@
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -216,17 +210,17 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -240,7 +234,7 @@ __tx_irq_processing_return:
@
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -256,28 +250,28 @@ __tx_irq_processing_return:
@__tx_example_vectored_irq_handler:
@
@
-@ /* Save initial context and call context save to prepare for
+@ /* Save initial context and call context save to prepare for
@ vectored ISR execution. */
@
@ STMDB sp!, {r0-r3} @ Save some scratch registers
@ MRS r0, SPSR @ Pickup saved SPSR
-@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ SUB lr, lr, #4 @ Adjust point of interrupt
@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
@ BL _tx_thread_vectored_context_save @ Vectored context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_start
@@ -286,7 +280,7 @@ __tx_irq_processing_return:
@ /* Application IRQ handlers can be called here! */
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_end
@@ -308,11 +302,11 @@ __tx_fiq_processing_return:
@ /* At this point execution is still in the FIQ mode. The CPSR, point of
@ interrupt, and all C scratch registers are available for use. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
@ from FIQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with FIQ interrupts enabled.
+@ system mode and returns with FIQ interrupts enabled.
@
-@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
@ prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm11/gnu/inc/tx_port.h b/ports/arm11/gnu/inc/tx_port.h
index 65ffe076e..259ad092d 100644
--- a/ports/arm11/gnu/inc/tx_port.h
+++ b/ports/arm11/gnu/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM11/GNU */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/GNU */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb__
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -307,8 +299,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM11/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM11/GNU Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/arm11/gnu/readme_threadx.txt b/ports/arm11/gnu/readme_threadx.txt
index d73008546..92a7c16d3 100644
--- a/ports/arm11/gnu/readme_threadx.txt
+++ b/ports/arm11/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for ARM11
+ Microsoft's Azure RTOS ThreadX for ARM11
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the ARM11 using GNU tools is at label _start.
+The entry point in ThreadX for the ARM11 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for ARM11
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The ARM11 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, ARM7 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, ARM7 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
diff --git a/ports/arm11/gnu/src/tx_thread_context_restore.S b/ports/arm11/gnu/src/tx_thread_context_restore.S
index 6a270b666..74fb495fb 100644
--- a/ports/arm11/gnu/src/tx_thread_context_restore.S
+++ b/ports/arm11/gnu/src/tx_thread_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -43,51 +43,42 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_restore ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the interrupt context if it is processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@@ -115,13 +106,13 @@ _tx_thread_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
diff --git a/ports/arm11/gnu/src/tx_thread_context_save.S b/ports/arm11/gnu/src/tx_thread_context_save.S
index 3fe539d2b..c8d7e503f 100644
--- a/ports/arm11/gnu/src/tx_thread_context_save.S
+++ b/ports/arm11/gnu/src/tx_thread_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -36,50 +36,41 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_save ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@@ -95,7 +86,7 @@ _tx_thread_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt CPSR
@@ -115,7 +106,7 @@ _tx_thread_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -131,7 +122,7 @@ _tx_thread_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
__tx_thread_not_nested_save:
@ }
@@ -145,13 +136,13 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} @ Store other registers
@
@ /* Save the current stack pointer in the thread's control block. */
@@ -171,7 +162,7 @@ __tx_thread_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@ else
@@ -181,7 +172,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
@@ -196,7 +187,7 @@ __tx_thread_idle_system_save:
#endif
ADD sp, sp, #16 @ Recover saved registers
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@}
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S b/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S
index 3d3dd37ac..5d6ed1498 100644
--- a/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -25,7 +25,7 @@
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
THUMB_MASK = 0x20 @ Thumb bit mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
SVC_MODE_BITS = 0x13 @ SVC mode value
@@ -47,47 +47,38 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_restore ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the fiq interrupt context when processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* FIQ ISR Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_context_restore(VOID)
@@ -116,13 +107,13 @@ _tx_thread_fiq_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
@@ -213,7 +204,7 @@ __tx_thread_fiq_preempt_restore:
BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
@
@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-@ _tx_timer_time_slice = 0;
+@ _tx_timer_time_slice = 0;
@
STR r2, [r0, #24] @ Save thread's time-slice
MOV r2, #0 @ Clear value
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_context_save.S b/ports/arm11/gnu/src/tx_thread_fiq_context_save.S
index 8dc69191e..93b333093 100644
--- a/ports/arm11/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/arm11/gnu/src/tx_thread_fiq_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,46 +34,37 @@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_save ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@ VOID _tx_thread_fiq_context_save(VOID)
@@ -89,7 +80,7 @@ _tx_thread_fiq_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
CMP r2, #0 @ Is this the first interrupt?
@@ -104,7 +95,7 @@ _tx_thread_fiq_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -120,38 +111,38 @@ _tx_thread_fiq_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
__tx_thread_fiq_not_nested_save:
-@ }
+@ }
@
@ /* Otherwise, not nested, check to see if a thread was running. */
@ else if (_tx_thread_current_ptr)
-@ {
+@ {
@
ADD r2, r2, #1 @ Increment the interrupt counter
STR r2, [r3] @ Store it back in the variable
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
-@ @ scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
-@ @ need to save sl and ip since FIQ has
-@ @ copies of these registers. Nested
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
@ @ interrupt processing does need to save
@ @ these registers.
@
@ /* Save the current stack pointer in the thread's control block. */
-@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
@
@ /* Switch to the system stack. */
-@ sp = _tx_thread_system_stack_ptr;
+@ sp = _tx_thread_system_stack_ptr;
@
MOV r10, #0 @ Clear stack limit
@@ -164,7 +155,7 @@ __tx_thread_fiq_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
@ else
@@ -184,16 +175,16 @@ __tx_thread_fiq_idle_system_save:
#endif
@
@ /* Not much to do here, save the current SPSR and LR for possible
-@ use in IRQ interrupted in idle system conditions, and return to
+@ use in IRQ interrupted in idle system conditions, and return to
@ FIQ interrupt processing. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, lr} @ Store other registers that will get used
-@ @ or stripped off the stack in context
-@ @ restore
- B __tx_fiq_processing_return @ Continue FIQ processing
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
-@}
+@}
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S b/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S
index 82362bbc1..1e9ba5135 100644
--- a/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@
@
@@ -37,54 +37,45 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_end ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-@/* processing from system mode back to FIQ mode prior to the ISR */
-@/* calling _tx_thread_fiq_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_end(VOID)
@@ -96,7 +87,7 @@ _tx_thread_fiq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_cxsf, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S b/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S
index 5a6b6e1b2..2f7f4f522 100644
--- a/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,51 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_start ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-@/* processing to the system mode so nested FIQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_control.S b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
index ecc9326d2..dd8b127cb 100644
--- a/ports/arm11/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -35,7 +35,7 @@ INT_MASK = 0x03F
$_tx_thread_interrupt_control:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
@@ -45,45 +45,36 @@ $_tx_thread_interrupt_control:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_control ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for changing the interrupt lockout */
-@/* posture of the system. */
-@/* */
-@/* INPUT */
-@/* */
-@/* new_posture New interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_disable.S b/ports/arm11/gnu/src/tx_thread_interrupt_disable.S
index f51c22382..fb369d0bb 100644
--- a/ports/arm11/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -38,7 +38,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
$_tx_thread_interrupt_disable:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
@@ -48,44 +48,35 @@ $_tx_thread_interrupt_disable:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_disable ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for disabling interrupts */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_restore.S b/ports/arm11/gnu/src/tx_thread_interrupt_restore.S
index 8506be1b3..78c85f918 100644
--- a/ports/arm11/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_restore:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
@@ -41,45 +41,36 @@ $_tx_thread_interrupt_restore:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_restore ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function is responsible for restoring interrupts to the state */
@/* returned by a previous _tx_thread_interrupt_disable call. */
-@/* */
-@/* INPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S b/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S
index 649bbbb0e..26504a38d 100644
--- a/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@
@@ -37,54 +37,45 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_end ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-@/* processing from system mode back to IRQ mode prior to the ISR */
-@/* calling _tx_thread_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_end(VOID)
@@ -96,7 +87,7 @@ _tx_thread_irq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_cxsf, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S b/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S
index ee9498452..12bedd934 100644
--- a/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,51 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_start ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_context_save has been called and switches the IRQ */
-@/* processing to the system mode so nested IRQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/arm11/gnu/src/tx_thread_schedule.S b/ports/arm11/gnu/src/tx_thread_schedule.S
index 9350540c2..2901fbefb 100644
--- a/ports/arm11/gnu/src/tx_thread_schedule.S
+++ b/ports/arm11/gnu/src/tx_thread_schedule.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -45,7 +45,7 @@ ENABLE_INTS = 0x80 @ IRQ Interrupts enabled mask
$_tx_thread_schedule:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_schedule @ Call _tx_thread_schedule function
@@ -55,48 +55,39 @@ $_tx_thread_schedule:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_schedule ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function waits for a thread control block pointer to appear in */
-@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-@/* in the variable, the corresponding thread is resumed. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* _tx_thread_system_return Return to system from thread */
-@/* _tx_thread_context_restore Restore thread's context */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@@ -124,7 +115,7 @@ __tx_thread_schedule_loop:
@
@ }
@ while(_tx_thread_execute_ptr == TX_NULL);
-@
+@
@ /* Yes! We have a thread to execute. Lockout interrupts and
@ transfer control to it. */
@
@@ -133,7 +124,7 @@ __tx_thread_schedule_loop:
@ /* Setup the current thread pointer. */
@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
@
- LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
STR r0, [r1] @ Setup current thread pointer
@
@ /* Increment the run count for this thread. */
@@ -147,7 +138,7 @@ __tx_thread_schedule_loop:
@ /* Setup time-slice, if present. */
@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
@
- LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
@ variable
LDR sp, [r0, #8] @ Switch stack pointers
STR r3, [r2] @ Setup time-slice
diff --git a/ports/arm11/gnu/src/tx_thread_stack_build.S b/ports/arm11/gnu/src/tx_thread_stack_build.S
index 7f156ee0e..989916ca1 100644
--- a/ports/arm11/gnu/src/tx_thread_stack_build.S
+++ b/ports/arm11/gnu/src/tx_thread_stack_build.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@ CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interru
.type $_tx_thread_stack_build,function
$_tx_thread_stack_build:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
@@ -52,47 +52,38 @@ $_tx_thread_stack_build:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_stack_build ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function builds a stack frame on the supplied thread's stack. */
@/* The stack frame results in a fake interrupt return to the supplied */
-@/* function pointer. */
-@/* */
-@/* INPUT */
-@/* */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
@/* thread_ptr Pointer to thread control blk */
@/* function_ptr Pointer to return function */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* CALLS */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_thread_create Create thread service */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -101,10 +92,10 @@ $_tx_thread_stack_build:
.type _tx_thread_stack_build,function
_tx_thread_stack_build:
@
-@
+@
@ /* Build a fake interrupt frame. The form of the fake interrupt stack
@ on theARM11 should look like the following after it is built:
-@
+@
@ Stack Top: 1 Interrupt stack frame type
@ CPSR Initial value for CPSR
@ a1 (r0) Initial value for a1
diff --git a/ports/arm11/gnu/src/tx_thread_system_return.S b/ports/arm11/gnu/src/tx_thread_system_return.S
index 1c26a7a06..c15ae2665 100644
--- a/ports/arm11/gnu/src/tx_thread_system_return.S
+++ b/ports/arm11/gnu/src/tx_thread_system_return.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -48,7 +48,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
$_tx_thread_system_return:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_system_return @ Call _tx_thread_system_return function
@@ -58,47 +58,38 @@ $_tx_thread_system_return:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_system_return ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is target processor specific. It is used to transfer */
-@/* control from a thread back to the ThreadX system. Only a */
-@/* minimal context is saved since the compiler assumes temp registers */
-@/* are going to get slicked by a function call anyway. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling loop */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ThreadX components */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
@/* */
@/**************************************************************************/
@VOID _tx_thread_system_return(VOID)
@@ -112,12 +103,12 @@ _tx_thread_system_return:
MOV r0, #0 @ Build a solicited stack type
MRS r1, CPSR @ Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} @ Save minimal context
-@
+@
@ /* Lockout interrupts. */
@
ORR r2, r1, #DISABLE_INTS @ Build disable interrupt CPSR
MSR CPSR_cxsf, r2 @ Disable interrupts
-
+
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@
@ /* Call the thread exit function to indicate the thread is no longer executing. */
diff --git a/ports/arm11/gnu/src/tx_thread_vectored_context_save.S b/ports/arm11/gnu/src/tx_thread_vectored_context_save.S
index 23f82007c..391cf7173 100644
--- a/ports/arm11/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/arm11/gnu/src/tx_thread_vectored_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -37,50 +37,41 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_vectored_context_save ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_vectored_context_save(VOID)
@@ -140,7 +131,7 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1, #0] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Note: Minimal context of interrupted thread is already saved. */
@@ -172,7 +163,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
diff --git a/ports/arm11/gnu/src/tx_timer_interrupt.S b/ports/arm11/gnu/src/tx_timer_interrupt.S
index 137c5883a..1236ec499 100644
--- a/ports/arm11/gnu/src/tx_timer_interrupt.S
+++ b/ports/arm11/gnu/src/tx_timer_interrupt.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Timer */
@/** */
@@ -48,7 +48,7 @@
.type $_tx_timer_interrupt,function
$_tx_timer_interrupt:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
@@ -58,49 +58,40 @@ $_tx_timer_interrupt:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_timer_interrupt ARM11/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt ARM11/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function processes the hardware timer interrupt. This */
-@/* processing includes incrementing the system clock and checking for */
-@/* time slice and/or timer expiration. If either is found, the */
-@/* interrupt context save/restore functions are called along with the */
-@/* expiration functions. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_time_slice Time slice interrupted thread */
-@/* _tx_timer_expiration_process Timer expiration processing */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* interrupt vector */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@@ -125,7 +116,7 @@ _tx_timer_interrupt:
@ if (_tx_timer_time_slice)
@ {
@
- LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
LDR r2, [r3] @ Pickup time-slice
CMP r2, #0 @ Is it non-active?
BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
@@ -243,7 +234,7 @@ __tx_timer_dont_activate:
@ if (_tx_timer_expired_time_slice)
@ {
@
- LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
LDR r2, [r3] @ Pickup the actual flag
CMP r2, #0 @ See if the flag is set
BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
diff --git a/ports/arm11/iar/example_build/cstartup.s b/ports/arm11/iar/example_build/cstartup.s
index b95efc0e9..3da2b79df 100644
--- a/ports/arm11/iar/example_build/cstartup.s
+++ b/ports/arm11/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/arm11/iar/example_build/sample_threadx.c b/ports/arm11/iar/example_build/sample_threadx.c
index a57d908d8..f9d0e94a2 100644
--- a/ports/arm11/iar/example_build/sample_threadx.c
+++ b/ports/arm11/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,42 +85,42 @@ CHAR *pointer;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -128,23 +128,23 @@ CHAR *pointer;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -247,11 +247,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -310,7 +310,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -363,7 +363,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm11/iar/example_build/tx_initialize_low_level.s b/ports/arm11/iar/example_build/tx_initialize_low_level.s
index 7242cfe4c..61d554bcc 100644
--- a/ports/arm11/iar/example_build/tx_initialize_low_level.s
+++ b/ports/arm11/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,47 +75,41 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* */
+;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm11/iar/inc/tx_port.h b/ports/arm11/iar/inc/tx_port.h
index 3f965ba3a..52b43a868 100644
--- a/ports/arm11/iar/inc/tx_port.h
+++ b/ports/arm11/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,38 +21,29 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM11/IAR */
-/* 6.1.6 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/IAR */
+/* 6.1.6 */
+/* */
+/* AUTHOR */
/* */
-/* AUTHOR */
-/* */
-/* William E. Lamie, Microsoft Corporation */
-/* */
-/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* */
-/**************************************************************************/
+/* William E. Lamie, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
+/* */
+/**************************************************************************/
#ifndef TX_PORT_H
#define TX_PORT_H
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -188,7 +180,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -202,17 +194,17 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -226,11 +218,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -240,23 +232,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -284,8 +276,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -296,22 +288,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -373,8 +365,8 @@ void _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM11/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM11/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/arm11/iar/readme_threadx.txt b/ports/arm11/iar/readme_threadx.txt
index fbe7deebb..8a4ef7037 100644
--- a/ports/arm11/iar/readme_threadx.txt
+++ b/ports/arm11/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for ARM11
+ Microsoft's Azure RTOS ThreadX for ARM11
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,52 +20,52 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based ARM11 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's ARM11 simulator.
A SPECIAL NOTE: The IAR ARM simulator does simulate interrupts. In order
-for the ThreadX demonstration to run properly, a periodic IRQ interrupt must
+for the ThreadX demonstration to run properly, a periodic IRQ interrupt must
be setup in the IAR debugging environment. We recommend setting an IRQ
interrupt to execute every 9999 cycles.
3. System Initialization
-The entry point in ThreadX for the ARM11 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the ARM11 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -83,12 +83,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -97,146 +97,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -250,29 +250,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for ARM11
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The ARM11 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -283,12 +283,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -296,7 +296,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -309,7 +309,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -320,12 +320,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -342,24 +342,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -367,15 +367,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -383,7 +383,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -394,12 +394,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, ARM11 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, ARM11 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -408,7 +408,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -439,18 +439,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -468,7 +468,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -484,22 +484,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/ARM11 Mixed Mode
-By default, ThreadX is setup for running in ARM11 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in ARM11 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -511,7 +511,7 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
diff --git a/ports/arm11/iar/src/tx_iar.c b/ports/arm11/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/arm11/iar/src/tx_iar.c
+++ b/ports/arm11/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/arm11/iar/src/tx_thread_context_restore.s b/ports/arm11/iar/src/tx_thread_context_restore.s
index 211b81dd4..addf77052 100644
--- a/ports/arm11/iar/src/tx_thread_context_restore.s
+++ b/ports/arm11/iar/src/tx_thread_context_restore.s
@@ -1,19 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,46 +52,40 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -119,13 +113,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/arm11/iar/src/tx_thread_context_save.s b/ports/arm11/iar/src/tx_thread_context_save.s
index c4d5b1b42..26a3b4d25 100644
--- a/ports/arm11/iar/src/tx_thread_context_save.s
+++ b/ports/arm11/iar/src/tx_thread_context_save.s
@@ -1,19 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -44,45 +44,39 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -97,7 +91,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -117,7 +111,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -133,7 +127,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -147,13 +141,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -173,7 +167,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -183,7 +177,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -198,7 +192,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/arm11/iar/src/tx_thread_fiq_context_restore.s b/ports/arm11/iar/src/tx_thread_fiq_context_restore.s
index 318245894..d9f8a37a8 100644
--- a/ports/arm11/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/arm11/iar/src/tx_thread_fiq_context_restore.s
@@ -1,19 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,7 +38,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -53,46 +53,40 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -120,13 +114,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -170,7 +164,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -217,7 +211,7 @@ __tx_thread_fiq_preempt_restore
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/arm11/iar/src/tx_thread_fiq_context_save.s b/ports/arm11/iar/src/tx_thread_fiq_context_save.s
index 170625814..55860011b 100644
--- a/ports/arm11/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/arm11/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,45 +36,39 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -89,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -104,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -120,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -164,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -184,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s b/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s
index 0d71933a2..2dbab8e51 100644
--- a/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,57 +34,51 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s b/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s
index 7b2b36cbe..2bbbe9b69 100644
--- a/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,50 +35,44 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_control.s b/ports/arm11/iar/src/tx_thread_interrupt_control.s
index 4cf6b9178..22f39ddf0 100644
--- a/ports/arm11/iar/src/tx_thread_interrupt_control.s
+++ b/ports/arm11/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,44 +35,38 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_disable.s b/ports/arm11/iar/src/tx_thread_interrupt_disable.s
index e1a618600..d963c895c 100644
--- a/ports/arm11/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/arm11/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,43 +36,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_restore.s b/ports/arm11/iar/src/tx_thread_interrupt_restore.s
index 28856151f..4bc8e9c22 100644
--- a/ports/arm11/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/arm11/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,44 +28,38 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/* */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_irq_nesting_end.s b/ports/arm11/iar/src/tx_thread_irq_nesting_end.s
index 7a7a35855..3695a57f1 100644
--- a/ports/arm11/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/arm11/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,57 +35,51 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_irq_nesting_start.s b/ports/arm11/iar/src/tx_thread_irq_nesting_start.s
index b76d1ff60..e538ca1b5 100644
--- a/ports/arm11/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/arm11/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,50 +35,44 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
;{
RSEG .text:CODE:NOROOT(2)
diff --git a/ports/arm11/iar/src/tx_thread_schedule.s b/ports/arm11/iar/src/tx_thread_schedule.s
index 761ec21c3..e4a4da47f 100644
--- a/ports/arm11/iar/src/tx_thread_schedule.s
+++ b/ports/arm11/iar/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,47 +43,41 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -111,7 +105,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +114,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +128,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/arm11/iar/src/tx_thread_stack_build.s b/ports/arm11/iar/src/tx_thread_stack_build.s
index 4e32e1fa2..13981a6c1 100644
--- a/ports/arm11/iar/src/tx_thread_stack_build.s
+++ b/ports/arm11/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
+;/* */
+;/* CALLED BY */
+;/* */
;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the ARM9 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/arm11/iar/src/tx_thread_system_return.s b/ports/arm11/iar/src/tx_thread_system_return.s
index c7042dfbe..2bc395e01 100644
--- a/ports/arm11/iar/src/tx_thread_system_return.s
+++ b/ports/arm11/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,46 +42,40 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -95,7 +89,7 @@ _tx_thread_system_return
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/arm11/iar/src/tx_thread_vectored_context_save.s b/ports/arm11/iar/src/tx_thread_vectored_context_save.s
index e287b8a50..155980360 100644
--- a/ports/arm11/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/arm11/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,45 +41,39 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -139,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/arm11/iar/src/tx_timer_interrupt.s b/ports/arm11/iar/src/tx_timer_interrupt.s
index 550bc0072..13c268516 100644
--- a/ports/arm11/iar/src/tx_timer_interrupt.s
+++ b/ports/arm11/iar/src/tx_timer_interrupt.s
@@ -1,20 +1,20 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -45,48 +45,42 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt ARM11/IAR */
-;/* 6.1 */
-;/* AUTHOR */
-;/* */
-;/* William E. Lamie, Microsoft Corporation */
-;/* */
-;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
-;/**************************************************************************/
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM11/IAR */
+;/* 6.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
+;/* */
+;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
RSEG .text:CODE:NOROOT(2)
@@ -110,7 +104,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -228,13 +222,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/arm9/ac5/example_build/sample_threadx.c b/ports/arm9/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/arm9/ac5/example_build/sample_threadx.c
+++ b/ports/arm9/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm9/ac5/example_build/tx_initialize_low_level.s b/ports/arm9/ac5/example_build/tx_initialize_low_level.s
index f2420967d..49dd27368 100644
--- a/ports/arm9/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/arm9/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -41,7 +41,7 @@ SYS_STACK_SIZE EQU 1024 ; SYS stack size (used for neste
IRQ_STACK_SIZE EQU 1024 ; IRQ stack size
;
;
-;/* ARM9 ARMulator Timer and Interrupt controller information. This depends on
+;/* ARM9 ARMulator Timer and Interrupt controller information. This depends on
; the ARMulator's Interrupt Controller and Timer being enabled in the default.ami.
; In addition, the addresses must match those specified in the peripherals.ami file.
; Please refer to section 2.10 and 4.16 of the Debug Target Guide, version 1.2. */
@@ -50,7 +50,7 @@ IRQStatus EQU 0x0a000000 ; IRQ Status Register
IRQRawStatus EQU 0x0a000004 ; IRQ Raw Status Register
IRQEnable EQU 0x0a000008 ; IRQ Enable Set Register
IRQEnableClear EQU 0x0a00000C ; IRQ Enable Clear Register
-IRQSoft EQU 0x0a000010 ; IRQ Soft
+IRQSoft EQU 0x0a000010 ; IRQ Soft
FIQStatus EQU 0x0a000100 ; FIQ Status Register
FIQRawStatus EQU 0x0a000104 ; FIQ Raw Status Register
FIQEnable EQU 0x0a000108 ; FIQ Enable Set Register
@@ -113,45 +113,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -202,7 +196,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -238,7 +232,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -290,7 +284,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -298,34 +292,34 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
; /* Check for Timer1 interrupts on the ARMulator. */
LDR r1,=IRQStatus ; Pickup address of IRQStatus register
- LDR r2, [r1] ; Read IRQStatus
+ LDR r2, [r1] ; Read IRQStatus
LDR r0,=TIMER1_BIT ; Pickup Timer1 interrupt present bit
AND r2, r2, r0 ; Is this a timer interrupt?
- CMP r2, r0 ;
+ CMP r2, r0 ;
BNE _tx_not_timer_interrupt ; If 0, not a timer interrupt
LDR r1,=Timer1Clear ; Build address of Timer1 clear register
- MOV r0,#0 ;
+ MOV r0,#0 ;
STR r0, [r1] ; Clear timer 0 interrupt
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -335,7 +329,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -351,28 +345,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -381,7 +375,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -403,11 +397,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm9/ac5/inc/tx_port.h b/ports/arm9/ac5/inc/tx_port.h
index 9741bb85a..e9dc64301 100644
--- a/ports/arm9/ac5/inc/tx_port.h
+++ b/ports/arm9/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM9/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM9/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -282,7 +274,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -291,7 +283,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -320,8 +312,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM9/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM9/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/arm9/ac5/readme_threadx.txt b/ports/arm9/ac5/readme_threadx.txt
index f07ea4948..4b455fa24 100644
--- a/ports/arm9/ac5/readme_threadx.txt
+++ b/ports/arm9/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for ARM9
+ Microsoft's Azure RTOS ThreadX for ARM9
Thumb & 32-bit Mode
@@ -6,15 +6,15 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -23,39 +23,39 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
3. System Initialization
-The entry point in ThreadX for the ARM9 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the ARM9 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -71,10 +71,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -85,161 +85,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -257,39 +257,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for ARM9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The ARM9 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -300,12 +300,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -313,7 +313,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -326,7 +326,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -336,12 +336,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -358,22 +358,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -381,10 +381,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -397,12 +397,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, ARM9 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, ARM9 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -411,7 +411,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -439,18 +439,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -466,7 +466,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -482,22 +482,22 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/ARM9 Mixed Mode
-By default, ThreadX is setup for running in ARM9 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in ARM9 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be built
+to this is the file tx_thread_shell_entry.c. This file must always be built
in 32-bit mode. In addition, if any Thumb code is used the entire ThreadX source-
both C and assembly - should be built with the "-apcs /interwork" option.
diff --git a/ports/arm9/ac5/src/tx_thread_context_restore.s b/ports/arm9/ac5/src/tx_thread_context_restore.s
index ff4f33242..a1eaf6688 100644
--- a/ports/arm9/ac5/src/tx_thread_context_restore.s
+++ b/ports/arm9/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
THUMB_MASK EQU 0x20 ; Thumb bit mask
SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
@@ -55,44 +55,38 @@ SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -120,13 +114,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/arm9/ac5/src/tx_thread_context_save.s b/ports/arm9/ac5/src/tx_thread_context_save.s
index 6e7963bf1..d78110be4 100644
--- a/ports/arm9/ac5/src/tx_thread_context_save.s
+++ b/ports/arm9/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -45,43 +45,37 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -96,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -116,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -132,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -146,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -172,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -182,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -197,7 +191,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/arm9/ac5/src/tx_thread_fiq_context_restore.s b/ports/arm9/ac5/src/tx_thread_fiq_context_restore.s
index 906b9bd19..fc6e01bb2 100644
--- a/ports/arm9/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/arm9/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
THUMB_MASK EQU 0x20 ; Thumb bit mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
SVC_MODE_BITS EQU 0x13 ; SVC mode value
@@ -57,44 +57,38 @@ SVC_MODE_BITS EQU 0x13 ; SVC mode value
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +116,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +166,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -219,7 +213,7 @@ __tx_thread_fiq_preempt_restore
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/arm9/ac5/src/tx_thread_fiq_context_save.s b/ports/arm9/ac5/src/tx_thread_fiq_context_save.s
index 93be71d74..da963065c 100644
--- a/ports/arm9/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/arm9/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/arm9/ac5/src/tx_thread_fiq_nesting_end.s b/ports/arm9/ac5/src/tx_thread_fiq_nesting_end.s
index ee8484ce6..e34c5be68 100644
--- a/ports/arm9/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/arm9/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_cxsf, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/arm9/ac5/src/tx_thread_fiq_nesting_start.s b/ports/arm9/ac5/src/tx_thread_fiq_nesting_start.s
index e2e9435b7..4b17fee9f 100644
--- a/ports/arm9/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/arm9/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/arm9/ac5/src/tx_thread_interrupt_control.s b/ports/arm9/ac5/src/tx_thread_interrupt_control.s
index b9a99e0c4..14c4e4f74 100644
--- a/ports/arm9/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/arm9/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/arm9/ac5/src/tx_thread_interrupt_disable.s b/ports/arm9/ac5/src/tx_thread_interrupt_disable.s
index 01e85f7f2..a5d834358 100644
--- a/ports/arm9/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/arm9/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
diff --git a/ports/arm9/ac5/src/tx_thread_interrupt_restore.s b/ports/arm9/ac5/src/tx_thread_interrupt_restore.s
index 638d1d0d4..d88578a80 100644
--- a/ports/arm9/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/arm9/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/arm9/ac5/src/tx_thread_irq_nesting_end.s b/ports/arm9/ac5/src/tx_thread_irq_nesting_end.s
index 032d4dcc4..622288dba 100644
--- a/ports/arm9/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/arm9/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_cxsf, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/arm9/ac5/src/tx_thread_irq_nesting_start.s b/ports/arm9/ac5/src/tx_thread_irq_nesting_start.s
index 3da96c713..7cd3cd98b 100644
--- a/ports/arm9/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/arm9/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/arm9/ac5/src/tx_thread_schedule.s b/ports/arm9/ac5/src/tx_thread_schedule.s
index 23b678e28..20fa4d411 100644
--- a/ports/arm9/ac5/src/tx_thread_schedule.s
+++ b/ports/arm9/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -47,45 +47,39 @@ ENABLE_INTS EQU 0x80 ; IRQ Interrupts enabled mask
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -112,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -121,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -135,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/arm9/ac5/src/tx_thread_stack_build.s b/ports/arm9/ac5/src/tx_thread_stack_build.s
index 2ca47eb66..a286e896f 100644
--- a/ports/arm9/ac5/src/tx_thread_stack_build.s
+++ b/ports/arm9/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,44 +38,38 @@ CPSR_MASK EQU 0x9F ; Mask initial CPSR, IRQ ints en
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -83,10 +77,10 @@ CPSR_MASK EQU 0x9F ; Mask initial CPSR, IRQ ints en
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the ARM9 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/arm9/ac5/src/tx_thread_system_return.s b/ports/arm9/ac5/src/tx_thread_system_return.s
index bf9f17351..83a54a0f8 100644
--- a/ports/arm9/ac5/src/tx_thread_system_return.s
+++ b/ports/arm9/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,50 +40,44 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -96,7 +90,7 @@ _tx_thread_system_return
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/arm9/ac5/src/tx_thread_vectored_context_save.s b/ports/arm9/ac5/src/tx_thread_vectored_context_save.s
index ede3ec497..a92837027 100644
--- a/ports/arm9/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/arm9/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -45,43 +45,37 @@ DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -144,7 +138,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -180,7 +174,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/arm9/ac5/src/tx_timer_interrupt.s b/ports/arm9/ac5/src/tx_timer_interrupt.s
index 061c5806e..86ddba6f3 100644
--- a/ports/arm9/ac5/src/tx_timer_interrupt.s
+++ b/ports/arm9/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt ARM9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/arm9/gnu/example_build/crt0.S b/ports/arm9/gnu/example_build/crt0.S
index aa0f32396..56b6c9580 100644
--- a/ports/arm9/gnu/example_build/crt0.S
+++ b/ports/arm9/gnu/example_build/crt0.S
@@ -26,13 +26,13 @@ _mainCRTStartup:
mov a2, #0 /* Second arg: fill value */
mov fp, a2 /* Null frame pointer */
mov r7, a2 /* Null frame pointer for Thumb */
-
+
ldr a1, .LC1 /* First arg: start of memory block */
- ldr a3, .LC2
+ ldr a3, .LC2
sub a3, a3, a1 /* Third arg: length of block */
-
-
+
+
bl memset
mov r0, #0 /* no arguments */
mov r1, #0 /* no argv either */
@@ -48,15 +48,15 @@ _mainCRTStartup:
/* bl init */
mov r0, r4
mov r1, r5
-#endif
+#endif
bl main
bl exit /* Should not return. */
-
- /* For Thumb, constants must be after the code since only
+
+ /* For Thumb, constants must be after the code since only
positive offsets are supported for PC relative addresses. */
-
+
.align 0
.LC0:
.LC1:
diff --git a/ports/arm9/gnu/example_build/reset.S b/ports/arm9/gnu/example_build/reset.S
index a11c826a3..5d05258bb 100644
--- a/ports/arm9/gnu/example_build/reset.S
+++ b/ports/arm9/gnu/example_build/reset.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -65,11 +65,11 @@ SWI:
.word __tx_swi_interrupt @ Software interrupt handler
PREFETCH:
.word __tx_prefetch_handler @ Prefetch exception handler
-ABORT:
+ABORT:
.word __tx_abort_handler @ Abort exception handler
-RESERVED:
+RESERVED:
.word __tx_reserved_handler @ Reserved exception handler
-IRQ:
+IRQ:
.word __tx_irq_handler @ IRQ interrupt handler
FIQ:
.word __tx_fiq_handler @ FIQ interrupt handler
diff --git a/ports/arm9/gnu/example_build/sample_threadx.c b/ports/arm9/gnu/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/arm9/gnu/example_build/sample_threadx.c
+++ b/ports/arm9/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm9/gnu/example_build/sample_threadx.ld b/ports/arm9/gnu/example_build/sample_threadx.ld
index 3dea4e1ca..e940b2b88 100644
--- a/ports/arm9/gnu/example_build/sample_threadx.ld
+++ b/ports/arm9/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/arm9/gnu/example_build/tx_initialize_low_level.S b/ports/arm9/gnu/example_build/tx_initialize_low_level.S
index 1f2207ecd..6b6da2ab4 100644
--- a/ports/arm9/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/arm9/gnu/example_build/tx_initialize_low_level.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -62,7 +62,7 @@ SYS_STACK_SIZE = 1024 @ System stack size
.type $_tx_initialize_low_level,function
$_tx_initialize_low_level:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
@@ -72,45 +72,39 @@ $_tx_initialize_low_level:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_initialize_low_level ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level ARM9/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for any low-level processor */
-@/* initialization, including setting up interrupt vectors, setting */
-@/* up a periodic timer interrupt source, saving the system stack */
-@/* pointer for use in ISR processing later, and finding the first */
-@/* available RAM memory address for tx_application_define. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@@ -125,7 +119,7 @@ _tx_initialize_low_level:
@
LDR r1, =_sp @ Get pointer to stack area
-#ifdef TX_ENABLE_IRQ_NESTING
+#ifdef TX_ENABLE_IRQ_NESTING
@
@ /* Setup the system mode stack for nested interrupt support */
@
@@ -156,7 +150,7 @@ _tx_initialize_low_level:
MSR CPSR, r0 @ Enter SVC mode
LDR r2, =_stack_bottom @ Pickup stack bottom
CMP r3, r2 @ Compare the current stack end with the bottom
-_stack_error_loop:
+_stack_error_loop:
BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
@
@ /* Save the system stack pointer. */
@@ -208,7 +202,7 @@ __tx_reserved_handler:
B __tx_reserved_handler @ Reserved exception handler
@
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -216,17 +210,17 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -240,7 +234,7 @@ __tx_irq_processing_return:
@
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -256,28 +250,28 @@ __tx_irq_processing_return:
@__tx_example_vectored_irq_handler:
@
@
-@ /* Save initial context and call context save to prepare for
+@ /* Save initial context and call context save to prepare for
@ vectored ISR execution. */
@
@ STMDB sp!, {r0-r3} @ Save some scratch registers
@ MRS r0, SPSR @ Pickup saved SPSR
-@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ SUB lr, lr, #4 @ Adjust point of interrupt
@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
@ BL _tx_thread_vectored_context_save @ Vectored context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_start
@@ -286,7 +280,7 @@ __tx_irq_processing_return:
@ /* Application IRQ handlers can be called here! */
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_end
@@ -308,11 +302,11 @@ __tx_fiq_processing_return:
@ /* At this point execution is still in the FIQ mode. The CPSR, point of
@ interrupt, and all C scratch registers are available for use. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
@ from FIQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with FIQ interrupts enabled.
+@ system mode and returns with FIQ interrupts enabled.
@
-@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
@ prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm9/gnu/inc/tx_port.h b/ports/arm9/gnu/inc/tx_port.h
index 5c83770f7..4597b2522 100644
--- a/ports/arm9/gnu/inc/tx_port.h
+++ b/ports/arm9/gnu/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM9/GNU */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM9/GNU */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb__
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -307,8 +299,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM9/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM9/GNU Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/arm9/gnu/readme_threadx.txt b/ports/arm9/gnu/readme_threadx.txt
index 54046146c..6f90b254e 100644
--- a/ports/arm9/gnu/readme_threadx.txt
+++ b/ports/arm9/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for ARM9
+ Microsoft's Azure RTOS ThreadX for ARM9
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: TX.A. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: TX.A. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the ARM9 using GNU tools is at label _start.
+The entry point in ThreadX for the ARM9 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for ARM9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The ARM9 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, ARM7 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, ARM7 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
diff --git a/ports/arm9/gnu/src/tx_thread_context_restore.S b/ports/arm9/gnu/src/tx_thread_context_restore.S
index 61087c84d..3dcf8f82a 100644
--- a/ports/arm9/gnu/src/tx_thread_context_restore.S
+++ b/ports/arm9/gnu/src/tx_thread_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -43,51 +43,42 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_restore ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the interrupt context if it is processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@@ -115,13 +106,13 @@ _tx_thread_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
diff --git a/ports/arm9/gnu/src/tx_thread_context_save.S b/ports/arm9/gnu/src/tx_thread_context_save.S
index f2ef9712b..712dc133c 100644
--- a/ports/arm9/gnu/src/tx_thread_context_save.S
+++ b/ports/arm9/gnu/src/tx_thread_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -36,50 +36,41 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_save ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@@ -95,7 +86,7 @@ _tx_thread_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt CPSR
@@ -115,7 +106,7 @@ _tx_thread_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -131,7 +122,7 @@ _tx_thread_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
__tx_thread_not_nested_save:
@ }
@@ -145,13 +136,13 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} @ Store other registers
@
@ /* Save the current stack pointer in the thread's control block. */
@@ -171,7 +162,7 @@ __tx_thread_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@ else
@@ -181,7 +172,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
@@ -196,7 +187,7 @@ __tx_thread_idle_system_save:
#endif
ADD sp, sp, #16 @ Recover saved registers
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@}
diff --git a/ports/arm9/gnu/src/tx_thread_fiq_context_restore.S b/ports/arm9/gnu/src/tx_thread_fiq_context_restore.S
index 5ac525432..c8dec5dc8 100644
--- a/ports/arm9/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/arm9/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -25,7 +25,7 @@
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
THUMB_MASK = 0x20 @ Thumb bit mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
SVC_MODE_BITS = 0x13 @ SVC mode value
@@ -47,47 +47,38 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_restore ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the fiq interrupt context when processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* FIQ ISR Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_context_restore(VOID)
@@ -116,13 +107,13 @@ _tx_thread_fiq_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
@@ -213,7 +204,7 @@ __tx_thread_fiq_preempt_restore:
BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
@
@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-@ _tx_timer_time_slice = 0;
+@ _tx_timer_time_slice = 0;
@
STR r2, [r0, #24] @ Save thread's time-slice
MOV r2, #0 @ Clear value
diff --git a/ports/arm9/gnu/src/tx_thread_fiq_context_save.S b/ports/arm9/gnu/src/tx_thread_fiq_context_save.S
index 121dee2ae..b7cc9ef85 100644
--- a/ports/arm9/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/arm9/gnu/src/tx_thread_fiq_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,46 +34,37 @@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_save ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@ VOID _tx_thread_fiq_context_save(VOID)
@@ -89,7 +80,7 @@ _tx_thread_fiq_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
CMP r2, #0 @ Is this the first interrupt?
@@ -104,7 +95,7 @@ _tx_thread_fiq_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -120,38 +111,38 @@ _tx_thread_fiq_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
__tx_thread_fiq_not_nested_save:
-@ }
+@ }
@
@ /* Otherwise, not nested, check to see if a thread was running. */
@ else if (_tx_thread_current_ptr)
-@ {
+@ {
@
ADD r2, r2, #1 @ Increment the interrupt counter
STR r2, [r3] @ Store it back in the variable
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
-@ @ scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
-@ @ need to save sl and ip since FIQ has
-@ @ copies of these registers. Nested
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
@ @ interrupt processing does need to save
@ @ these registers.
@
@ /* Save the current stack pointer in the thread's control block. */
-@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
@
@ /* Switch to the system stack. */
-@ sp = _tx_thread_system_stack_ptr;
+@ sp = _tx_thread_system_stack_ptr;
@
MOV r10, #0 @ Clear stack limit
@@ -164,7 +155,7 @@ __tx_thread_fiq_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
@ else
@@ -184,16 +175,16 @@ __tx_thread_fiq_idle_system_save:
#endif
@
@ /* Not much to do here, save the current SPSR and LR for possible
-@ use in IRQ interrupted in idle system conditions, and return to
+@ use in IRQ interrupted in idle system conditions, and return to
@ FIQ interrupt processing. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, lr} @ Store other registers that will get used
-@ @ or stripped off the stack in context
-@ @ restore
- B __tx_fiq_processing_return @ Continue FIQ processing
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
-@}
+@}
diff --git a/ports/arm9/gnu/src/tx_thread_fiq_nesting_end.S b/ports/arm9/gnu/src/tx_thread_fiq_nesting_end.S
index ded353be4..1d7ebb34b 100644
--- a/ports/arm9/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/arm9/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@
@
@@ -37,54 +37,45 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_end ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-@/* processing from system mode back to FIQ mode prior to the ISR */
-@/* calling _tx_thread_fiq_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_end(VOID)
@@ -96,7 +87,7 @@ _tx_thread_fiq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_cxsf, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/arm9/gnu/src/tx_thread_fiq_nesting_start.S b/ports/arm9/gnu/src/tx_thread_fiq_nesting_start.S
index be12db772..d23b9fc06 100644
--- a/ports/arm9/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/arm9/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,51 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_start ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-@/* processing to the system mode so nested FIQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/arm9/gnu/src/tx_thread_interrupt_control.S b/ports/arm9/gnu/src/tx_thread_interrupt_control.S
index 2c72a853e..9b0a2a0ac 100644
--- a/ports/arm9/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/arm9/gnu/src/tx_thread_interrupt_control.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -35,7 +35,7 @@ INT_MASK = 0x03F
$_tx_thread_interrupt_control:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
@@ -45,45 +45,36 @@ $_tx_thread_interrupt_control:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_control ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for changing the interrupt lockout */
-@/* posture of the system. */
-@/* */
-@/* INPUT */
-@/* */
-@/* new_posture New interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/arm9/gnu/src/tx_thread_interrupt_disable.S b/ports/arm9/gnu/src/tx_thread_interrupt_disable.S
index dbd7a6db6..cd4cf2048 100644
--- a/ports/arm9/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/arm9/gnu/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -38,7 +38,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
$_tx_thread_interrupt_disable:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
@@ -48,44 +48,35 @@ $_tx_thread_interrupt_disable:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_disable ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for disabling interrupts */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)
diff --git a/ports/arm9/gnu/src/tx_thread_interrupt_restore.S b/ports/arm9/gnu/src/tx_thread_interrupt_restore.S
index e30d35776..4ae750f1e 100644
--- a/ports/arm9/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/arm9/gnu/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_restore:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
@@ -41,45 +41,36 @@ $_tx_thread_interrupt_restore:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_restore ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function is responsible for restoring interrupts to the state */
@/* returned by a previous _tx_thread_interrupt_disable call. */
-@/* */
-@/* INPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/arm9/gnu/src/tx_thread_irq_nesting_end.S b/ports/arm9/gnu/src/tx_thread_irq_nesting_end.S
index afbca2cff..d26c93ff0 100644
--- a/ports/arm9/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/arm9/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@
@@ -37,54 +37,45 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_end ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-@/* processing from system mode back to IRQ mode prior to the ISR */
-@/* calling _tx_thread_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_end(VOID)
@@ -96,7 +87,7 @@ _tx_thread_irq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_cxsf, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/arm9/gnu/src/tx_thread_irq_nesting_start.S b/ports/arm9/gnu/src/tx_thread_irq_nesting_start.S
index 060a471c4..8c5d86428 100644
--- a/ports/arm9/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/arm9/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,51 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_start ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_context_save has been called and switches the IRQ */
-@/* processing to the system mode so nested IRQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/arm9/gnu/src/tx_thread_schedule.S b/ports/arm9/gnu/src/tx_thread_schedule.S
index 50affb8c8..2cd8d04f8 100644
--- a/ports/arm9/gnu/src/tx_thread_schedule.S
+++ b/ports/arm9/gnu/src/tx_thread_schedule.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -45,7 +45,7 @@ ENABLE_INTS = 0x80 @ IRQ Interrupts enabled mask
$_tx_thread_schedule:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_schedule @ Call _tx_thread_schedule function
@@ -55,48 +55,39 @@ $_tx_thread_schedule:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_schedule ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function waits for a thread control block pointer to appear in */
-@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-@/* in the variable, the corresponding thread is resumed. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* _tx_thread_system_return Return to system from thread */
-@/* _tx_thread_context_restore Restore thread's context */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@@ -124,7 +115,7 @@ __tx_thread_schedule_loop:
@
@ }
@ while(_tx_thread_execute_ptr == TX_NULL);
-@
+@
@ /* Yes! We have a thread to execute. Lockout interrupts and
@ transfer control to it. */
@
@@ -133,7 +124,7 @@ __tx_thread_schedule_loop:
@ /* Setup the current thread pointer. */
@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
@
- LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
STR r0, [r1] @ Setup current thread pointer
@
@ /* Increment the run count for this thread. */
@@ -147,7 +138,7 @@ __tx_thread_schedule_loop:
@ /* Setup time-slice, if present. */
@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
@
- LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
@ variable
LDR sp, [r0, #8] @ Switch stack pointers
STR r3, [r2] @ Setup time-slice
diff --git a/ports/arm9/gnu/src/tx_thread_stack_build.S b/ports/arm9/gnu/src/tx_thread_stack_build.S
index 675c1f4f8..14ff41811 100644
--- a/ports/arm9/gnu/src/tx_thread_stack_build.S
+++ b/ports/arm9/gnu/src/tx_thread_stack_build.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@ CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interru
.type $_tx_thread_stack_build,function
$_tx_thread_stack_build:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
@@ -52,47 +52,38 @@ $_tx_thread_stack_build:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_stack_build ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function builds a stack frame on the supplied thread's stack. */
@/* The stack frame results in a fake interrupt return to the supplied */
-@/* function pointer. */
-@/* */
-@/* INPUT */
-@/* */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
@/* thread_ptr Pointer to thread control blk */
@/* function_ptr Pointer to return function */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* CALLS */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_thread_create Create thread service */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -101,10 +92,10 @@ $_tx_thread_stack_build:
.type _tx_thread_stack_build,function
_tx_thread_stack_build:
@
-@
+@
@ /* Build a fake interrupt frame. The form of the fake interrupt stack
@ on the ARM9 should look like the following after it is built:
-@
+@
@ Stack Top: 1 Interrupt stack frame type
@ CPSR Initial value for CPSR
@ a1 (r0) Initial value for a1
diff --git a/ports/arm9/gnu/src/tx_thread_system_return.S b/ports/arm9/gnu/src/tx_thread_system_return.S
index ba0ed9bb2..e551a18bc 100644
--- a/ports/arm9/gnu/src/tx_thread_system_return.S
+++ b/ports/arm9/gnu/src/tx_thread_system_return.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -48,7 +48,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
$_tx_thread_system_return:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_system_return @ Call _tx_thread_system_return function
@@ -58,47 +58,38 @@ $_tx_thread_system_return:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_system_return ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is target processor specific. It is used to transfer */
-@/* control from a thread back to the ThreadX system. Only a */
-@/* minimal context is saved since the compiler assumes temp registers */
-@/* are going to get slicked by a function call anyway. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling loop */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ThreadX components */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
@/* */
@/**************************************************************************/
@VOID _tx_thread_system_return(VOID)
@@ -112,12 +103,12 @@ _tx_thread_system_return:
MOV r0, #0 @ Build a solicited stack type
MRS r1, CPSR @ Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} @ Save minimal context
-@
+@
@ /* Lockout interrupts. */
@
ORR r2, r1, #DISABLE_INTS @ Build disable interrupt CPSR
MSR CPSR_cxsf, r2 @ Disable interrupts
-
+
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@
@ /* Call the thread exit function to indicate the thread is no longer executing. */
diff --git a/ports/arm9/gnu/src/tx_thread_vectored_context_save.S b/ports/arm9/gnu/src/tx_thread_vectored_context_save.S
index d123e0547..3f56304d6 100644
--- a/ports/arm9/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/arm9/gnu/src/tx_thread_vectored_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -37,50 +37,41 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_vectored_context_save ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_vectored_context_save(VOID)
@@ -140,7 +131,7 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1, #0] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Note: Minimal context of interrupted thread is already saved. */
@@ -172,7 +163,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
diff --git a/ports/arm9/gnu/src/tx_timer_interrupt.S b/ports/arm9/gnu/src/tx_timer_interrupt.S
index 48bee7f7f..9ae148bf4 100644
--- a/ports/arm9/gnu/src/tx_timer_interrupt.S
+++ b/ports/arm9/gnu/src/tx_timer_interrupt.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Timer */
@/** */
@@ -48,7 +48,7 @@
.type $_tx_timer_interrupt,function
$_tx_timer_interrupt:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
@@ -58,49 +58,40 @@ $_tx_timer_interrupt:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_timer_interrupt ARM9/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt ARM9/GNU */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function processes the hardware timer interrupt. This */
-@/* processing includes incrementing the system clock and checking for */
-@/* time slice and/or timer expiration. If either is found, the */
-@/* interrupt context save/restore functions are called along with the */
-@/* expiration functions. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_time_slice Time slice interrupted thread */
-@/* _tx_timer_expiration_process Timer expiration processing */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* interrupt vector */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Cindy Deng Modified comment(s), added */
-@/* #include tx_user.h, */
-@/* resulting in version 6.2.1 */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@@ -125,7 +116,7 @@ _tx_timer_interrupt:
@ if (_tx_timer_time_slice)
@ {
@
- LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
LDR r2, [r3] @ Pickup time-slice
CMP r2, #0 @ Is it non-active?
BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
@@ -243,7 +234,7 @@ __tx_timer_dont_activate:
@ if (_tx_timer_expired_time_slice)
@ {
@
- LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
LDR r2, [r3] @ Pickup the actual flag
CMP r2, #0 @ See if the flag is set
BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
diff --git a/ports/arm9/iar/example_build/cstartup.s b/ports/arm9/iar/example_build/cstartup.s
index b95efc0e9..3da2b79df 100644
--- a/ports/arm9/iar/example_build/cstartup.s
+++ b/ports/arm9/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/arm9/iar/example_build/sample_threadx.c b/ports/arm9/iar/example_build/sample_threadx.c
index 68cd97fe0..56f7cd55e 100644
--- a/ports/arm9/iar/example_build/sample_threadx.c
+++ b/ports/arm9/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,42 +85,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -128,23 +128,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -247,11 +247,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -310,7 +310,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -363,7 +363,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/arm9/iar/example_build/tx_initialize_low_level.s b/ports/arm9/iar/example_build/tx_initialize_low_level.s
index 89024b8e2..103d72d6f 100644
--- a/ports/arm9/iar/example_build/tx_initialize_low_level.s
+++ b/ports/arm9/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,45 +75,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/arm9/iar/inc/tx_port.h b/ports/arm9/iar/inc/tx_port.h
index f75d60486..e4411ae6c 100644
--- a/ports/arm9/iar/inc/tx_port.h
+++ b/ports/arm9/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h ARM9/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM9/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -188,7 +180,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -202,17 +194,17 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -226,11 +218,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -240,23 +232,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -284,8 +276,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -296,22 +288,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -373,8 +365,8 @@ void _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARM9/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARM9/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/arm9/iar/readme_threadx.txt b/ports/arm9/iar/readme_threadx.txt
index 3f3946049..7ce5c3176 100644
--- a/ports/arm9/iar/readme_threadx.txt
+++ b/ports/arm9/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for ARM9
+ Microsoft's Azure RTOS ThreadX for ARM9
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,52 +20,52 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based ARM9 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's ARM9 simulator.
A SPECIAL NOTE: The IAR ARM simulator does simulate interrupts. In order
-for the ThreadX demonstration to run properly, a periodic IRQ interrupt must
+for the ThreadX demonstration to run properly, a periodic IRQ interrupt must
be setup in the IAR debugging environment. We recommend setting an IRQ
interrupt to execute every 9999 cycles.
3. System Initialization
-The entry point in ThreadX for the ARM9 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the ARM9 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -83,12 +83,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -97,146 +97,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -250,29 +250,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for ARM9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The ARM9 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -283,12 +283,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -296,7 +296,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -309,7 +309,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -320,12 +320,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -342,24 +342,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -367,15 +367,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -383,7 +383,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -394,12 +394,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, ARM9 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, ARM9 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -408,7 +408,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -439,18 +439,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -468,7 +468,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -484,22 +484,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/ARM9 Mixed Mode
-By default, ThreadX is setup for running in ARM9 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in ARM9 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
diff --git a/ports/arm9/iar/src/tx_iar.c b/ports/arm9/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/arm9/iar/src/tx_iar.c
+++ b/ports/arm9/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/arm9/iar/src/tx_thread_context_restore.s b/ports/arm9/iar/src/tx_thread_context_restore.s
index ac57cd961..51450dd51 100644
--- a/ports/arm9/iar/src/tx_thread_context_restore.s
+++ b/ports/arm9/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,7 +36,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -50,44 +50,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -117,13 +111,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/arm9/iar/src/tx_thread_context_save.s b/ports/arm9/iar/src/tx_thread_context_save.s
index db77a17bb..eeadaa24a 100644
--- a/ports/arm9/iar/src/tx_thread_context_save.s
+++ b/ports/arm9/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -44,43 +44,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -97,7 +91,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -117,7 +111,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -133,7 +127,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -147,13 +141,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -173,7 +167,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -183,7 +177,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -198,7 +192,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/arm9/iar/src/tx_thread_fiq_context_restore.s b/ports/arm9/iar/src/tx_thread_fiq_context_restore.s
index 137714b6f..1fd57ad01 100644
--- a/ports/arm9/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/arm9/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,44 +52,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -119,13 +113,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -169,7 +163,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -216,7 +210,7 @@ __tx_thread_fiq_preempt_restore
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/arm9/iar/src/tx_thread_fiq_context_save.s b/ports/arm9/iar/src/tx_thread_fiq_context_save.s
index 562d51328..38e7e5682 100644
--- a/ports/arm9/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/arm9/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,43 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -89,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -104,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -120,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -164,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -184,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/arm9/iar/src/tx_thread_fiq_nesting_end.s b/ports/arm9/iar/src/tx_thread_fiq_nesting_end.s
index e3897977b..e71cea184 100644
--- a/ports/arm9/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/arm9/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,55 +34,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
diff --git a/ports/arm9/iar/src/tx_thread_fiq_nesting_start.s b/ports/arm9/iar/src/tx_thread_fiq_nesting_start.s
index 41867e494..d9d0fb14b 100644
--- a/ports/arm9/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/arm9/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/arm9/iar/src/tx_thread_interrupt_control.s b/ports/arm9/iar/src/tx_thread_interrupt_control.s
index a6d540a7d..82ccae6ea 100644
--- a/ports/arm9/iar/src/tx_thread_interrupt_control.s
+++ b/ports/arm9/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,42 +35,36 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/arm9/iar/src/tx_thread_interrupt_disable.s b/ports/arm9/iar/src/tx_thread_interrupt_disable.s
index 64c7508aa..5a5cd20ca 100644
--- a/ports/arm9/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/arm9/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/arm9/iar/src/tx_thread_interrupt_restore.s b/ports/arm9/iar/src/tx_thread_interrupt_restore.s
index deace5085..945993e09 100644
--- a/ports/arm9/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/arm9/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/arm9/iar/src/tx_thread_irq_nesting_end.s b/ports/arm9/iar/src/tx_thread_irq_nesting_end.s
index ff38c1ca3..54003548c 100644
--- a/ports/arm9/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/arm9/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,55 +35,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/arm9/iar/src/tx_thread_irq_nesting_start.s b/ports/arm9/iar/src/tx_thread_irq_nesting_start.s
index 5e08187c0..5b13d5288 100644
--- a/ports/arm9/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/arm9/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/arm9/iar/src/tx_thread_schedule.s b/ports/arm9/iar/src/tx_thread_schedule.s
index 86a70a4fc..89c875c9c 100644
--- a/ports/arm9/iar/src/tx_thread_schedule.s
+++ b/ports/arm9/iar/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,45 +43,39 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -111,7 +105,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +114,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +128,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/arm9/iar/src/tx_thread_stack_build.s b/ports/arm9/iar/src/tx_thread_stack_build.s
index c59c61f41..cd10adb11 100644
--- a/ports/arm9/iar/src/tx_thread_stack_build.s
+++ b/ports/arm9/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the ARM9 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/arm9/iar/src/tx_thread_system_return.s b/ports/arm9/iar/src/tx_thread_system_return.s
index e8660d9bf..d428d4a65 100644
--- a/ports/arm9/iar/src/tx_thread_system_return.s
+++ b/ports/arm9/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,44 +42,38 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -95,7 +89,7 @@ _tx_thread_system_return
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/arm9/iar/src/tx_thread_vectored_context_save.s b/ports/arm9/iar/src/tx_thread_vectored_context_save.s
index 1aa26ae1f..ce1b9d5b5 100644
--- a/ports/arm9/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/arm9/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,43 +41,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -139,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/arm9/iar/src/tx_timer_interrupt.s b/ports/arm9/iar/src/tx_timer_interrupt.s
index 28bac1450..367e629fc 100644
--- a/ports/arm9/iar/src/tx_timer_interrupt.s
+++ b/ports/arm9/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt ARM9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/c667x/ccs/example_build/include/C66XX.h b/ports/c667x/ccs/example_build/include/C66XX.h
index 581b563ed..80507ca26 100644
--- a/ports/c667x/ccs/example_build/include/C66XX.h
+++ b/ports/c667x/ccs/example_build/include/C66XX.h
@@ -52,7 +52,7 @@
3. This file is best viewed with the TAB setting set to '4'.
- 4. This header file is externally controlled from user C-code by run-time
+ 4. This header file is externally controlled from user C-code by run-time
compiler keys definitions in order to apply DSP-type specific
definitions to refer to particular definitions included for different
DSP type:
diff --git a/ports/c667x/ccs/example_build/include/C66XX_DEF.hxx b/ports/c667x/ccs/example_build/include/C66XX_DEF.hxx
index 9764a47f1..0eb6a1d36 100644
--- a/ports/c667x/ccs/example_build/include/C66XX_DEF.hxx
+++ b/ports/c667x/ccs/example_build/include/C66XX_DEF.hxx
@@ -791,53 +791,53 @@
//=============================================================================
//============ PLL controller registers =======================================
//=============================================================================
-// PLL control register - r/w
+// PLL control register - r/w
#define C66XX_PLL_PLLCTL_RG_OFFSET 0x100
-// PLL secondary control register - r/w
+// PLL secondary control register - r/w
#define C66XX_PLL_SECCTL_RG_OFFSET 0x108
-// PLL multiplier control register - r/w
+// PLL multiplier control register - r/w
#define C66XX_PLL_PLLM_RG_OFFSET 0x110
-// PLL controller divider 1 register - r/w
+// PLL controller divider 1 register - r/w
#define C66XX_PLL_PLLDIV1_RG_OFFSET 0x118
-// PLL controller divider 2 register - r/w
+// PLL controller divider 2 register - r/w
#define C66XX_PLL_PLLDIV2_RG_OFFSET 0x11c
-// PLL controller divider 3 register - r/w
+// PLL controller divider 3 register - r/w
#define C66XX_PLL_PLLDIV3_RG_OFFSET 0x120
-// PLL controller command register - r/w
+// PLL controller command register - r/w
#define C66XX_PLL_PLLCMD_RG_OFFSET 0x138
-// PLL controller status register - r/w
+// PLL controller status register - r/w
#define C66XX_PLL_PLLSTAT_RG_OFFSET 0x13c
-// PLL controller clock align control register - r/w
+// PLL controller clock align control register - r/w
#define C66XX_PLL_ALNCTL_RG_OFFSET 0x140
-// PLL controller divider ratio change status register - r/w
+// PLL controller divider ratio change status register - r/w
#define C66XX_PLL_DCHANGE_RG_OFFSET 0x144
// SYSCLK status register - r-only
#define C66XX_PLL_SYSTAT_RG_OFFSET 0x150
-// PLL controller divider 4 register - r/w
+// PLL controller divider 4 register - r/w
#define C66XX_PLL_PLLDIV4_RG_OFFSET 0x160
-// PLL controller divider 5 register - r/w
+// PLL controller divider 5 register - r/w
#define C66XX_PLL_PLLDIV5_RG_OFFSET 0x164
-// PLL controller divider 6 register - r/w
+// PLL controller divider 6 register - r/w
#define C66XX_PLL_PLLDIV6_RG_OFFSET 0x168
-// PLL controller divider 7 register - r/w
+// PLL controller divider 7 register - r/w
#define C66XX_PLL_PLLDIV7_RG_OFFSET 0x16c
-// PLL controller divider 8 register - r/w
+// PLL controller divider 8 register - r/w
#define C66XX_PLL_PLLDIV8_RG_OFFSET 0x170
-// PLL controller divider 9 register - r/w
+// PLL controller divider 9 register - r/w
#define C66XX_PLL_PLLDIV9_RG_OFFSET 0x174
-// PLL controller divider 10 register - r/w
+// PLL controller divider 10 register - r/w
#define C66XX_PLL_PLLDIV10_RG_OFFSET 0x178
-// PLL controller divider 11 register - r/w
+// PLL controller divider 11 register - r/w
#define C66XX_PLL_PLLDIV11_RG_OFFSET 0x17c
-// PLL controller divider 12 register - r/w
+// PLL controller divider 12 register - r/w
#define C66XX_PLL_PLLDIV12_RG_OFFSET 0x180
-// PLL controller divider 13 register - r/w
+// PLL controller divider 13 register - r/w
#define C66XX_PLL_PLLDIV13_RG_OFFSET 0x184
-// PLL controller divider 14 register - r/w
+// PLL controller divider 14 register - r/w
#define C66XX_PLL_PLLDIV14_RG_OFFSET 0x188
-// PLL controller divider 15 register - r/w
+// PLL controller divider 15 register - r/w
#define C66XX_PLL_PLLDIV15_RG_OFFSET 0x18c
-// PLL controller divider 16 register - r/w
+// PLL controller divider 16 register - r/w
#define C66XX_PLL_PLLDIV16_RG_OFFSET 0x190
#define C66XX_PLL_PLLCTL_RG_ADDR (C66XX_PLL_RG_AREA_SADDR + C66XX_PLL_PLLCTL_RG_OFFSET)
diff --git a/ports/c667x/ccs/example_build/include/C66XX_FUNCTIONS.hxx b/ports/c667x/ccs/example_build/include/C66XX_FUNCTIONS.hxx
index 8564e44dc..8011bcac6 100644
--- a/ports/c667x/ccs/example_build/include/C66XX_FUNCTIONS.hxx
+++ b/ports/c667x/ccs/example_build/include/C66XX_FUNCTIONS.hxx
@@ -775,7 +775,7 @@ uint32_t C66XX_INT_init_chip(uint32_t cpintc_id);
*
* System events are those events generated by a hardware module in the system.
* These events are inputs into CPINTC.
- * Host events are the output events of CPINTC, which act as event inputs to
+ * Host events are the output events of CPINTC, which act as event inputs to
* C66x CorePac interrupt controllers (INTC).
*
* @param[in] cpintc_handle - chip interrupt controller handle returned by
@@ -1372,7 +1372,7 @@ void C66XX_UART_transmit_string(char *s);
* @brief Function receives a line ended with CR character, and stores
* received characters into string with '\0' symbol.
*
- * Note that maximum received line length should not exceed
+ * Note that maximum received line length should not exceed
* C66XX_UART_LINE_LEN_MAX value!
*
* @param[in] s - Pointer to a string to store received characters
@@ -1626,7 +1626,7 @@ typedef struct
* packets) and data streaming (Type11 packets) operations.
* 2. Max MTU length is set to 256 bytes.
* 3. SRIO 8-bit and 16-bit base device IDs are set to supplied parameters.
- * 4. Available destination SRIO 8-bit and 16-bit device IDs are set
+ * 4. Available destination SRIO 8-bit and 16-bit device IDs are set
* according to supplied parameters.
* 5. Operation mode is set according to supplied parameter.
* 6. Link rate and ports configuration (4 ports are available) are set
diff --git a/ports/c667x/ccs/example_build/include/C66XX_MACROS.hxx b/ports/c667x/ccs/example_build/include/C66XX_MACROS.hxx
index 54e7ef57a..32b1e4ff3 100644
--- a/ports/c667x/ccs/example_build/include/C66XX_MACROS.hxx
+++ b/ports/c667x/ccs/example_build/include/C66XX_MACROS.hxx
@@ -40,7 +40,7 @@
typedef volatile uint32_t __C66XX_IO_DATA_TYPE__;
-// read-back data bitmask for DSP memory-mapped registers (32-bit wide)
+// read-back data bitmask for DSP memory-mapped registers (32-bit wide)
#define C66XX_RG_DATA_BITMASK 0xffffffff
//=============================================================================
diff --git a/ports/c667x/ccs/example_build/include/TA66XX_DSP.h b/ports/c667x/ccs/example_build/include/TA66XX_DSP.h
index 04dfc4b70..ba3fa3417 100644
--- a/ports/c667x/ccs/example_build/include/TA66XX_DSP.h
+++ b/ports/c667x/ccs/example_build/include/TA66XX_DSP.h
@@ -11,7 +11,7 @@
Description:
------------
- This file contains general definitions and API functions for TORNADO AMC
+ This file contains general definitions and API functions for TORNADO AMC
modules SDK and must be included in the user C-application for
TORNADO AMC modules.
diff --git a/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC.h b/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC.h
index dbc748e0c..028ce3367 100644
--- a/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC.h
+++ b/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC.h
@@ -11,7 +11,7 @@
Description:
------------
- This file contains definitions, macros and API functions for TORNADO AMC
+ This file contains definitions, macros and API functions for TORNADO AMC
modules on-board DSP environment and must be included in the user
C-application for TORNADO AMC modules.
diff --git a/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC_FUNCTIONS.hxx b/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC_FUNCTIONS.hxx
index 338a01ee1..fcec18ced 100644
--- a/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC_FUNCTIONS.hxx
+++ b/ports/c667x/ccs/example_build/include/TA66XX_DSP_BC_FUNCTIONS.hxx
@@ -7,7 +7,7 @@
Notes:
------
- 1. This C-header file contains TORNADO AMC modules SDK functions
+ 1. This C-header file contains TORNADO AMC modules SDK functions
for DSP environment declarations and is an include file for
TI C6xxx C/C++ Code Generation Tools, which must be invoked to compile
for TORNADO AMC platform.
@@ -1008,7 +1008,7 @@ int32_t TA66XX_BC_get_hw_cfg_info(TA66XX_BC_HW_CFG_INFO_DATA_DD *info_dd);
/*------------ TA66XX_BC_get_fmc_info() function -------------------------*//**
- * @brief Function returns FMC module device info: installed status, device
+ * @brief Function returns FMC module device info: installed status, device
* name, serial number, manufacturing date, firmware revisions, etc.
*
* @param[out] info_dd - pointer to a buffer that receives FMC info data
@@ -1081,7 +1081,7 @@ int32_t TA66XX_BC_set_mmc_power_down_notification(void);
* @brief Function returns identification info about installed SFP
* transceiver: 256-byte array read from address 0x50 (identification info
* according to SFF-8472) and 256-byte array read from address 0x51 (digital
- * diagnostic monitoring interface (DDMI) data)
+ * diagnostic monitoring interface (DDMI) data)
*
* @param[out] id_data - pointer to a buffer that receives 256-byte array read
* from address 0x50 (identification info according to SFF-8472).
@@ -1356,7 +1356,7 @@ uint32_t TA66XX_BC_get_flash_length(void);
/*------------ TA66XX_BC_get_flash_hw_wp_enable_status() function --------*//**
- * @brief Function returns enable status of on-board FLASH memory hardware
+ * @brief Function returns enable status of on-board FLASH memory hardware
* (via on-board switch) write-protection
*
* @return On-board FLASH memory hardware write-protection enable state:
@@ -1367,7 +1367,7 @@ uint32_t TA66XX_BC_get_flash_hw_wp_enable_status(void);
/*------------ TA66XX_BC_get_flash_sw_wp_enable_status() function --------*//**
- * @brief Function returns enable status of on-board FLASH memory software
+ * @brief Function returns enable status of on-board FLASH memory software
* write-protection
*
* @return On-board FLASH memory software write-protection enable state:
@@ -1507,7 +1507,7 @@ uint32_t TA66XX_BC_get_mram_length(void);
/*------------ TA66XX_BC_get_mram_sw_wp_enable_status() function ---------*//**
- * @brief Function returns enable status of on-board MRAM memory software
+ * @brief Function returns enable status of on-board MRAM memory software
* write-protection
*
* @return On-board MRAM memory software write-protection enable state:
diff --git a/ports/c667x/ccs/example_build/include/TA66XX_OSAL.h b/ports/c667x/ccs/example_build/include/TA66XX_OSAL.h
index d61af0e91..360e9f3b1 100644
--- a/ports/c667x/ccs/example_build/include/TA66XX_OSAL.h
+++ b/ports/c667x/ccs/example_build/include/TA66XX_OSAL.h
@@ -412,7 +412,7 @@ void *Osal_srioDataBufferMalloc(uint32_t numBytes);
/*------------ Osal_srioDataBufferFree() function ------------------------*//**
- * @brief Function is used to clean up a previously allocated data buffer
+ * @brief Function is used to clean up a previously allocated data buffer
* block. All data buffers are in the global address space.
*
* @param[in] ptr - pointer to the memory block to be cleaned up
diff --git a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.c b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.c
index 18bad8de3..a97ce125e 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.c
+++ b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -121,7 +121,7 @@ UINT status;
/* Create the main thread. */
status = tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -135,11 +135,11 @@ UINT status;
while (1);
}
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
status = tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -154,7 +154,7 @@ UINT status;
}
status = tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -168,10 +168,10 @@ UINT status;
while (1);
}
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
status = tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -186,7 +186,7 @@ UINT status;
}
status = tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -203,7 +203,7 @@ UINT status;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
status = tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -219,7 +219,7 @@ UINT status;
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
status = tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -234,7 +234,7 @@ UINT status;
}
status = tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -328,7 +328,7 @@ UINT status;
/* Increment the thread counter. */
thread_0_counter++;
-
+
/* Sleep for 10 ticks. */
tx_thread_sleep(10);
@@ -384,11 +384,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -447,7 +447,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -500,7 +500,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.cmd b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.cmd
index a2267231d..590da9dc6 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.cmd
+++ b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/sample_threadx.cmd
@@ -4,18 +4,18 @@
-l C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\lib\ti.csl.ae66
-l C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\lib\ti.csl.intc.ae66
-l c:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\lib\release\ti.platform.evm6678l.ae66
-
+
/* Memory Map */
MEMORY
{
L1PSRAM (RWX) : org = 0x00E00000, len = 0x00008000
- L1DSRAM (RWX) : org = 0x00F00000, len = 0x00008000
+ L1DSRAM (RWX) : org = 0x00F00000, len = 0x00008000
CODE_RAM (RWX) : org = 0x00800000, len = 0x00020000
DATA_RAM (RWX) : org = 0x00820000, len = 0x00060000
MSMCSRAM (RWX) : org = 0x0c000000, len = 0x00400000
DDR3 (RWX) : org = 0x80000000, len = 0x80000000
}
-
+
SECTIONS
{
.text > CODE_RAM
@@ -30,7 +30,7 @@ SECTIONS
.ppinfo > CODE_RAM
.ppdata > CODE_RAM
.csl_vect > CODE_RAM
- platform_lib > CODE_RAM
+ platform_lib > CODE_RAM
GROUP
{
@@ -42,7 +42,7 @@ SECTIONS
/* COFF sections */
.pinit > CODE_RAM
.cinit > CODE_RAM
-
+
/* EABI sections */
.binit > CODE_RAM
.init_array > CODE_RAM
diff --git a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/targetConfigs/TMS320C6678.ccxml b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/targetConfigs/TMS320C6678.ccxml
index b7147d7fd..d10a283a1 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/targetConfigs/TMS320C6678.ccxml
+++ b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/targetConfigs/TMS320C6678.ccxml
@@ -1,6 +1,6 @@
-
+
diff --git a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/tx_initialize_low_level.asm b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/tx_initialize_low_level.asm
index 686220c59..1339dbf56 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_c6678evm/tx_initialize_low_level.asm
+++ b/ports/c667x/ccs/example_build/sample_threadx_c6678evm/tx_initialize_low_level.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -82,7 +82,7 @@ INTMUX1_TMR8_VAL .set 0x43 ; Tie in Event 67 (TINT8H) t
.global _tx_first_free_memory
.align 16
_tx_first_free_memory:
- .space 4
+ .space 4
; Useful macro definitions
; Load 32-bit integer into register
@@ -111,42 +111,42 @@ TX_INTERRUPT_EXIT .macro
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -219,7 +219,7 @@ _tx_int4_vector:
STW A4,*+SP(36) ; Save A4
NOP
-;_tx_timer_interrupt_preamble:
+;_tx_timer_interrupt_preamble:
MVK_LH TMR8_INTCTLSTAT_ADDR,A0 ; Build address of Timer Interrupt Control Register
MVK_LH INTCTLSTAT_VAL,A1 ; Build value of Timer Interrupt Control Register
@@ -234,7 +234,7 @@ _tx_int4_vector:
B A0 ; Branch ThreadX timer ISR routine
NOP 5 ; Delay slots
NOP
-
+
.global _tx_int5_vector
diff --git a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.c b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.c
index 18bad8de3..a97ce125e 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.c
+++ b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -121,7 +121,7 @@ UINT status;
/* Create the main thread. */
status = tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -135,11 +135,11 @@ UINT status;
while (1);
}
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
status = tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -154,7 +154,7 @@ UINT status;
}
status = tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -168,10 +168,10 @@ UINT status;
while (1);
}
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
status = tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -186,7 +186,7 @@ UINT status;
}
status = tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -203,7 +203,7 @@ UINT status;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
status = tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -219,7 +219,7 @@ UINT status;
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
status = tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -234,7 +234,7 @@ UINT status;
}
status = tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
if (status != TX_SUCCESS)
{
@@ -328,7 +328,7 @@ UINT status;
/* Increment the thread counter. */
thread_0_counter++;
-
+
/* Sleep for 10 ticks. */
tx_thread_sleep(10);
@@ -384,11 +384,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -447,7 +447,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -500,7 +500,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.cmd b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.cmd
index b03e87b5e..f84bffc6d 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.cmd
+++ b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/sample_threadx.cmd
@@ -3,18 +3,18 @@
-stack 0x1000
-l C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\lib\ti.csl.ae66
-l C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\lib\ti.csl.intc.ae66
-
+
/* Memory Map */
MEMORY
{
L1PSRAM (RWX) : org = 0x00E00000, len = 0x00008000
- L1DSRAM (RWX) : org = 0x00F00000, len = 0x00008000
+ L1DSRAM (RWX) : org = 0x00F00000, len = 0x00008000
CODE_RAM (RWX) : org = 0x00800000, len = 0x00020000
DATA_RAM (RWX) : org = 0x00820000, len = 0x00060000
MSMCSRAM (RWX) : org = 0x0c000000, len = 0x00400000
DDR3 (RWX) : org = 0x80000000, len = 0x80000000
}
-
+
SECTIONS
{
.text > CODE_RAM
@@ -40,7 +40,7 @@ SECTIONS
/* COFF sections */
.pinit > CODE_RAM
.cinit > CODE_RAM
-
+
/* EABI sections */
.binit > CODE_RAM
.init_array > CODE_RAM
diff --git a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/targetConfigs/TMS320C6678.ccxml b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/targetConfigs/TMS320C6678.ccxml
index b7147d7fd..d10a283a1 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/targetConfigs/TMS320C6678.ccxml
+++ b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/targetConfigs/TMS320C6678.ccxml
@@ -1,6 +1,6 @@
-
+
diff --git a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/tx_initialize_low_level.asm b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/tx_initialize_low_level.asm
index 14591f593..ca59cb5d2 100644
--- a/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/tx_initialize_low_level.asm
+++ b/ports/c667x/ccs/example_build/sample_threadx_ta6678fmc/tx_initialize_low_level.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -82,7 +82,7 @@ INTMUX1_TMR8_VAL .set 0x43 ; Tie in Event 67 (TINT8H) t
.global _tx_first_free_memory
.align 16
_tx_first_free_memory:
- .space 4
+ .space 4
; Useful macro definitions
; Load 32-bit integer into register
@@ -111,42 +111,42 @@ TX_INTERRUPT_EXIT .macro
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level C667x+/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level C667x+/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -219,7 +219,7 @@ _tx_int4_vector:
STW A4,*+SP(36) ; Save A4
NOP
-;_tx_timer_interrupt_preamble:
+;_tx_timer_interrupt_preamble:
MVK_LH TMR8_INTCTLSTAT_ADDR,A0 ; Build address of Timer Interrupt Control Register
MVK_LH INTCTLSTAT_VAL,A1 ; Build value of Timer Interrupt Control Register
@@ -235,7 +235,7 @@ _tx_int4_vector:
B A0 ; Branch ThreadX timer ISR routine
NOP 5 ; Delay slots
NOP
-
+
.global _tx_int5_vector
diff --git a/ports/c667x/ccs/example_build/tx/Release/ccsObjs.opt b/ports/c667x/ccs/example_build/tx/Release/ccsObjs.opt
index e954d96e7..98982c105 100644
--- a/ports/c667x/ccs/example_build/tx/Release/ccsObjs.opt
+++ b/ports/c667x/ccs/example_build/tx/Release/ccsObjs.opt
@@ -1 +1 @@
-"./tx_block_allocate.obj" "./tx_block_pool_cleanup.obj" "./tx_block_pool_create.obj" "./tx_block_pool_delete.obj" "./tx_block_pool_info_get.obj" "./tx_block_pool_initialize.obj" "./tx_block_pool_performance_info_get.obj" "./tx_block_pool_performance_system_info_get.obj" "./tx_block_pool_prioritize.obj" "./tx_block_release.obj" "./tx_byte_allocate.obj" "./tx_byte_pool_cleanup.obj" "./tx_byte_pool_create.obj" "./tx_byte_pool_delete.obj" "./tx_byte_pool_info_get.obj" "./tx_byte_pool_initialize.obj" "./tx_byte_pool_performance_info_get.obj" "./tx_byte_pool_performance_system_info_get.obj" "./tx_byte_pool_prioritize.obj" "./tx_byte_pool_search.obj" "./tx_byte_release.obj" "./tx_event_flags_cleanup.obj" "./tx_event_flags_create.obj" "./tx_event_flags_delete.obj" "./tx_event_flags_get.obj" "./tx_event_flags_info_get.obj" "./tx_event_flags_initialize.obj" "./tx_event_flags_performance_info_get.obj" "./tx_event_flags_performance_system_info_get.obj" "./tx_event_flags_set.obj" "./tx_event_flags_set_notify.obj" "./tx_initialize_high_level.obj" "./tx_initialize_kernel_enter.obj" "./tx_initialize_kernel_setup.obj" "./tx_mutex_cleanup.obj" "./tx_mutex_create.obj" "./tx_mutex_delete.obj" "./tx_mutex_get.obj" "./tx_mutex_info_get.obj" "./tx_mutex_initialize.obj" "./tx_mutex_performance_info_get.obj" "./tx_mutex_performance_system_info_get.obj" "./tx_mutex_prioritize.obj" "./tx_mutex_priority_change.obj" "./tx_mutex_put.obj" "./tx_queue_cleanup.obj" "./tx_queue_create.obj" "./tx_queue_delete.obj" "./tx_queue_flush.obj" "./tx_queue_front_send.obj" "./tx_queue_info_get.obj" "./tx_queue_initialize.obj" "./tx_queue_performance_info_get.obj" "./tx_queue_performance_system_info_get.obj" "./tx_queue_prioritize.obj" "./tx_queue_receive.obj" "./tx_queue_send.obj" "./tx_queue_send_notify.obj" "./tx_semaphore_ceiling_put.obj" "./tx_semaphore_cleanup.obj" "./tx_semaphore_create.obj" "./tx_semaphore_delete.obj" "./tx_semaphore_get.obj" "./tx_semaphore_info_get.obj" "./tx_semaphore_initialize.obj" "./tx_semaphore_performance_info_get.obj" "./tx_semaphore_performance_system_info_get.obj" "./tx_semaphore_prioritize.obj" "./tx_semaphore_put.obj" "./tx_semaphore_put_notify.obj" "./tx_thread_context_restore.obj" "./tx_thread_context_save.obj" "./tx_thread_create.obj" "./tx_thread_delete.obj" "./tx_thread_entry_exit_notify.obj" "./tx_thread_identify.obj" "./tx_thread_info_get.obj" "./tx_thread_initialize.obj" "./tx_thread_interrupt_control.obj" "./tx_thread_performance_info_get.obj" "./tx_thread_performance_system_info_get.obj" "./tx_thread_preemption_change.obj" "./tx_thread_priority_change.obj" "./tx_thread_relinquish.obj" "./tx_thread_reset.obj" "./tx_thread_resume.obj" "./tx_thread_schedule.obj" "./tx_thread_shell_entry.obj" "./tx_thread_sleep.obj" "./tx_thread_stack_analyze.obj" "./tx_thread_stack_build.obj" "./tx_thread_stack_error_handler.obj" "./tx_thread_stack_error_notify.obj" "./tx_thread_suspend.obj" "./tx_thread_system_preempt_check.obj" "./tx_thread_system_resume.obj" "./tx_thread_system_return.obj" "./tx_thread_system_suspend.obj" "./tx_thread_terminate.obj" "./tx_thread_time_slice.obj" "./tx_thread_time_slice_change.obj" "./tx_thread_timeout.obj" "./tx_thread_wait_abort.obj" "./tx_time_get.obj" "./tx_time_set.obj" "./tx_timer_activate.obj" "./tx_timer_change.obj" "./tx_timer_create.obj" "./tx_timer_deactivate.obj" "./tx_timer_delete.obj" "./tx_timer_expiration_process.obj" "./tx_timer_info_get.obj" "./tx_timer_initialize.obj" "./tx_timer_interrupt.obj" "./tx_timer_performance_info_get.obj" "./tx_timer_performance_system_info_get.obj" "./tx_timer_system_activate.obj" "./tx_timer_system_deactivate.obj" "./tx_timer_thread_entry.obj" "./tx_trace_buffer_full_notify.obj" "./tx_trace_disable.obj" "./tx_trace_enable.obj" "./tx_trace_event_filter.obj" "./tx_trace_event_unfilter.obj" "./tx_trace_initialize.obj" "./tx_trace_interrupt_control.obj" "./tx_trace_isr_enter_insert.obj" "./tx_trace_isr_exit_insert.obj" "./tx_trace_object_register.obj" "./tx_trace_object_unregister.obj" "./tx_trace_user_event_insert.obj" "./txe_block_allocate.obj" "./txe_block_pool_create.obj" "./txe_block_pool_delete.obj" "./txe_block_pool_info_get.obj" "./txe_block_pool_prioritize.obj" "./txe_block_release.obj" "./txe_byte_allocate.obj" "./txe_byte_pool_create.obj" "./txe_byte_pool_delete.obj" "./txe_byte_pool_info_get.obj" "./txe_byte_pool_prioritize.obj" "./txe_byte_release.obj" "./txe_event_flags_create.obj" "./txe_event_flags_delete.obj" "./txe_event_flags_get.obj" "./txe_event_flags_info_get.obj" "./txe_event_flags_set.obj" "./txe_event_flags_set_notify.obj" "./txe_mutex_create.obj" "./txe_mutex_delete.obj" "./txe_mutex_get.obj" "./txe_mutex_info_get.obj" "./txe_mutex_prioritize.obj" "./txe_mutex_put.obj" "./txe_queue_create.obj" "./txe_queue_delete.obj" "./txe_queue_flush.obj" "./txe_queue_front_send.obj" "./txe_queue_info_get.obj" "./txe_queue_prioritize.obj" "./txe_queue_receive.obj" "./txe_queue_send.obj" "./txe_queue_send_notify.obj" "./txe_semaphore_ceiling_put.obj" "./txe_semaphore_create.obj" "./txe_semaphore_delete.obj" "./txe_semaphore_get.obj" "./txe_semaphore_info_get.obj" "./txe_semaphore_prioritize.obj" "./txe_semaphore_put.obj" "./txe_semaphore_put_notify.obj" "./txe_thread_create.obj" "./txe_thread_delete.obj" "./txe_thread_entry_exit_notify.obj" "./txe_thread_info_get.obj" "./txe_thread_preemption_change.obj" "./txe_thread_priority_change.obj" "./txe_thread_relinquish.obj" "./txe_thread_reset.obj" "./txe_thread_resume.obj" "./txe_thread_suspend.obj" "./txe_thread_terminate.obj" "./txe_thread_time_slice_change.obj" "./txe_thread_wait_abort.obj" "./txe_timer_activate.obj" "./txe_timer_change.obj" "./txe_timer_create.obj" "./txe_timer_deactivate.obj" "./txe_timer_delete.obj" "./txe_timer_info_get.obj"
\ No newline at end of file
+"./tx_block_allocate.obj" "./tx_block_pool_cleanup.obj" "./tx_block_pool_create.obj" "./tx_block_pool_delete.obj" "./tx_block_pool_info_get.obj" "./tx_block_pool_initialize.obj" "./tx_block_pool_performance_info_get.obj" "./tx_block_pool_performance_system_info_get.obj" "./tx_block_pool_prioritize.obj" "./tx_block_release.obj" "./tx_byte_allocate.obj" "./tx_byte_pool_cleanup.obj" "./tx_byte_pool_create.obj" "./tx_byte_pool_delete.obj" "./tx_byte_pool_info_get.obj" "./tx_byte_pool_initialize.obj" "./tx_byte_pool_performance_info_get.obj" "./tx_byte_pool_performance_system_info_get.obj" "./tx_byte_pool_prioritize.obj" "./tx_byte_pool_search.obj" "./tx_byte_release.obj" "./tx_event_flags_cleanup.obj" "./tx_event_flags_create.obj" "./tx_event_flags_delete.obj" "./tx_event_flags_get.obj" "./tx_event_flags_info_get.obj" "./tx_event_flags_initialize.obj" "./tx_event_flags_performance_info_get.obj" "./tx_event_flags_performance_system_info_get.obj" "./tx_event_flags_set.obj" "./tx_event_flags_set_notify.obj" "./tx_initialize_high_level.obj" "./tx_initialize_kernel_enter.obj" "./tx_initialize_kernel_setup.obj" "./tx_mutex_cleanup.obj" "./tx_mutex_create.obj" "./tx_mutex_delete.obj" "./tx_mutex_get.obj" "./tx_mutex_info_get.obj" "./tx_mutex_initialize.obj" "./tx_mutex_performance_info_get.obj" "./tx_mutex_performance_system_info_get.obj" "./tx_mutex_prioritize.obj" "./tx_mutex_priority_change.obj" "./tx_mutex_put.obj" "./tx_queue_cleanup.obj" "./tx_queue_create.obj" "./tx_queue_delete.obj" "./tx_queue_flush.obj" "./tx_queue_front_send.obj" "./tx_queue_info_get.obj" "./tx_queue_initialize.obj" "./tx_queue_performance_info_get.obj" "./tx_queue_performance_system_info_get.obj" "./tx_queue_prioritize.obj" "./tx_queue_receive.obj" "./tx_queue_send.obj" "./tx_queue_send_notify.obj" "./tx_semaphore_ceiling_put.obj" "./tx_semaphore_cleanup.obj" "./tx_semaphore_create.obj" "./tx_semaphore_delete.obj" "./tx_semaphore_get.obj" "./tx_semaphore_info_get.obj" "./tx_semaphore_initialize.obj" "./tx_semaphore_performance_info_get.obj" "./tx_semaphore_performance_system_info_get.obj" "./tx_semaphore_prioritize.obj" "./tx_semaphore_put.obj" "./tx_semaphore_put_notify.obj" "./tx_thread_context_restore.obj" "./tx_thread_context_save.obj" "./tx_thread_create.obj" "./tx_thread_delete.obj" "./tx_thread_entry_exit_notify.obj" "./tx_thread_identify.obj" "./tx_thread_info_get.obj" "./tx_thread_initialize.obj" "./tx_thread_interrupt_control.obj" "./tx_thread_performance_info_get.obj" "./tx_thread_performance_system_info_get.obj" "./tx_thread_preemption_change.obj" "./tx_thread_priority_change.obj" "./tx_thread_relinquish.obj" "./tx_thread_reset.obj" "./tx_thread_resume.obj" "./tx_thread_schedule.obj" "./tx_thread_shell_entry.obj" "./tx_thread_sleep.obj" "./tx_thread_stack_analyze.obj" "./tx_thread_stack_build.obj" "./tx_thread_stack_error_handler.obj" "./tx_thread_stack_error_notify.obj" "./tx_thread_suspend.obj" "./tx_thread_system_preempt_check.obj" "./tx_thread_system_resume.obj" "./tx_thread_system_return.obj" "./tx_thread_system_suspend.obj" "./tx_thread_terminate.obj" "./tx_thread_time_slice.obj" "./tx_thread_time_slice_change.obj" "./tx_thread_timeout.obj" "./tx_thread_wait_abort.obj" "./tx_time_get.obj" "./tx_time_set.obj" "./tx_timer_activate.obj" "./tx_timer_change.obj" "./tx_timer_create.obj" "./tx_timer_deactivate.obj" "./tx_timer_delete.obj" "./tx_timer_expiration_process.obj" "./tx_timer_info_get.obj" "./tx_timer_initialize.obj" "./tx_timer_interrupt.obj" "./tx_timer_performance_info_get.obj" "./tx_timer_performance_system_info_get.obj" "./tx_timer_system_activate.obj" "./tx_timer_system_deactivate.obj" "./tx_timer_thread_entry.obj" "./tx_trace_buffer_full_notify.obj" "./tx_trace_disable.obj" "./tx_trace_enable.obj" "./tx_trace_event_filter.obj" "./tx_trace_event_unfilter.obj" "./tx_trace_initialize.obj" "./tx_trace_interrupt_control.obj" "./tx_trace_isr_enter_insert.obj" "./tx_trace_isr_exit_insert.obj" "./tx_trace_object_register.obj" "./tx_trace_object_unregister.obj" "./tx_trace_user_event_insert.obj" "./txe_block_allocate.obj" "./txe_block_pool_create.obj" "./txe_block_pool_delete.obj" "./txe_block_pool_info_get.obj" "./txe_block_pool_prioritize.obj" "./txe_block_release.obj" "./txe_byte_allocate.obj" "./txe_byte_pool_create.obj" "./txe_byte_pool_delete.obj" "./txe_byte_pool_info_get.obj" "./txe_byte_pool_prioritize.obj" "./txe_byte_release.obj" "./txe_event_flags_create.obj" "./txe_event_flags_delete.obj" "./txe_event_flags_get.obj" "./txe_event_flags_info_get.obj" "./txe_event_flags_set.obj" "./txe_event_flags_set_notify.obj" "./txe_mutex_create.obj" "./txe_mutex_delete.obj" "./txe_mutex_get.obj" "./txe_mutex_info_get.obj" "./txe_mutex_prioritize.obj" "./txe_mutex_put.obj" "./txe_queue_create.obj" "./txe_queue_delete.obj" "./txe_queue_flush.obj" "./txe_queue_front_send.obj" "./txe_queue_info_get.obj" "./txe_queue_prioritize.obj" "./txe_queue_receive.obj" "./txe_queue_send.obj" "./txe_queue_send_notify.obj" "./txe_semaphore_ceiling_put.obj" "./txe_semaphore_create.obj" "./txe_semaphore_delete.obj" "./txe_semaphore_get.obj" "./txe_semaphore_info_get.obj" "./txe_semaphore_prioritize.obj" "./txe_semaphore_put.obj" "./txe_semaphore_put_notify.obj" "./txe_thread_create.obj" "./txe_thread_delete.obj" "./txe_thread_entry_exit_notify.obj" "./txe_thread_info_get.obj" "./txe_thread_preemption_change.obj" "./txe_thread_priority_change.obj" "./txe_thread_relinquish.obj" "./txe_thread_reset.obj" "./txe_thread_resume.obj" "./txe_thread_suspend.obj" "./txe_thread_terminate.obj" "./txe_thread_time_slice_change.obj" "./txe_thread_wait_abort.obj" "./txe_timer_activate.obj" "./txe_timer_change.obj" "./txe_timer_create.obj" "./txe_timer_deactivate.obj" "./txe_timer_delete.obj" "./txe_timer_info_get.obj"
\ No newline at end of file
diff --git a/ports/c667x/ccs/example_build/tx/Release/makefile b/ports/c667x/ccs/example_build/tx/Release/makefile
index 45d27b35b..10d8815d5 100644
--- a/ports/c667x/ccs/example_build/tx/Release/makefile
+++ b/ports/c667x/ccs/example_build/tx/Release/makefile
@@ -6,8 +6,8 @@ SHELL = cmd.exe
CG_TOOL_ROOT := C:/ti/ccsv8/tools/compiler/ti-cgt-c6000_8.2.4
-GEN_OPTS__FLAG :=
-GEN_CMDS__FLAG :=
+GEN_OPTS__FLAG :=
+GEN_CMDS__FLAG :=
ORDERED_OBJS += \
"./tx_block_allocate.obj" \
@@ -305,7 +305,7 @@ endif
-include ../makefile.defs
-# Add inputs and outputs from these tool invocations to the build variables
+# Add inputs and outputs from these tool invocations to the build variables
LIB_OUTPUTS += \
tx.lib \
@@ -329,18 +329,18 @@ endif
# Other Targets
clean:
-$(RM) $(LIB_OUTPUTS__QUOTED)
- -$(RM) "tx_block_allocate.obj" "tx_block_pool_cleanup.obj" "tx_block_pool_create.obj" "tx_block_pool_delete.obj" "tx_block_pool_info_get.obj" "tx_block_pool_initialize.obj" "tx_block_pool_performance_info_get.obj" "tx_block_pool_performance_system_info_get.obj" "tx_block_pool_prioritize.obj" "tx_block_release.obj" "tx_byte_allocate.obj" "tx_byte_pool_cleanup.obj" "tx_byte_pool_create.obj" "tx_byte_pool_delete.obj" "tx_byte_pool_info_get.obj" "tx_byte_pool_initialize.obj" "tx_byte_pool_performance_info_get.obj" "tx_byte_pool_performance_system_info_get.obj" "tx_byte_pool_prioritize.obj" "tx_byte_pool_search.obj" "tx_byte_release.obj" "tx_event_flags_cleanup.obj" "tx_event_flags_create.obj" "tx_event_flags_delete.obj" "tx_event_flags_get.obj" "tx_event_flags_info_get.obj" "tx_event_flags_initialize.obj" "tx_event_flags_performance_info_get.obj" "tx_event_flags_performance_system_info_get.obj" "tx_event_flags_set.obj" "tx_event_flags_set_notify.obj" "tx_initialize_high_level.obj" "tx_initialize_kernel_enter.obj"
- -$(RM) "tx_initialize_kernel_setup.obj" "tx_mutex_cleanup.obj" "tx_mutex_create.obj" "tx_mutex_delete.obj" "tx_mutex_get.obj" "tx_mutex_info_get.obj" "tx_mutex_initialize.obj" "tx_mutex_performance_info_get.obj" "tx_mutex_performance_system_info_get.obj" "tx_mutex_prioritize.obj" "tx_mutex_priority_change.obj" "tx_mutex_put.obj" "tx_queue_cleanup.obj" "tx_queue_create.obj" "tx_queue_delete.obj" "tx_queue_flush.obj" "tx_queue_front_send.obj" "tx_queue_info_get.obj" "tx_queue_initialize.obj" "tx_queue_performance_info_get.obj" "tx_queue_performance_system_info_get.obj" "tx_queue_prioritize.obj" "tx_queue_receive.obj" "tx_queue_send.obj" "tx_queue_send_notify.obj" "tx_semaphore_ceiling_put.obj" "tx_semaphore_cleanup.obj" "tx_semaphore_create.obj" "tx_semaphore_delete.obj" "tx_semaphore_get.obj" "tx_semaphore_info_get.obj" "tx_semaphore_initialize.obj" "tx_semaphore_performance_info_get.obj" "tx_semaphore_performance_system_info_get.obj" "tx_semaphore_prioritize.obj" "tx_semaphore_put.obj" "tx_semaphore_put_notify.obj"
- -$(RM) "tx_thread_context_restore.obj" "tx_thread_context_save.obj" "tx_thread_create.obj" "tx_thread_delete.obj" "tx_thread_entry_exit_notify.obj" "tx_thread_identify.obj" "tx_thread_info_get.obj" "tx_thread_initialize.obj" "tx_thread_interrupt_control.obj" "tx_thread_performance_info_get.obj" "tx_thread_performance_system_info_get.obj" "tx_thread_preemption_change.obj" "tx_thread_priority_change.obj" "tx_thread_relinquish.obj" "tx_thread_reset.obj" "tx_thread_resume.obj" "tx_thread_schedule.obj" "tx_thread_shell_entry.obj" "tx_thread_sleep.obj" "tx_thread_stack_analyze.obj" "tx_thread_stack_build.obj" "tx_thread_stack_error_handler.obj" "tx_thread_stack_error_notify.obj" "tx_thread_suspend.obj" "tx_thread_system_preempt_check.obj" "tx_thread_system_resume.obj" "tx_thread_system_return.obj" "tx_thread_system_suspend.obj" "tx_thread_terminate.obj" "tx_thread_time_slice.obj" "tx_thread_time_slice_change.obj" "tx_thread_timeout.obj" "tx_thread_wait_abort.obj" "tx_time_get.obj" "tx_time_set.obj"
- -$(RM) "tx_timer_activate.obj" "tx_timer_change.obj" "tx_timer_create.obj" "tx_timer_deactivate.obj" "tx_timer_delete.obj" "tx_timer_expiration_process.obj" "tx_timer_info_get.obj" "tx_timer_initialize.obj" "tx_timer_interrupt.obj" "tx_timer_performance_info_get.obj" "tx_timer_performance_system_info_get.obj" "tx_timer_system_activate.obj" "tx_timer_system_deactivate.obj" "tx_timer_thread_entry.obj" "tx_trace_buffer_full_notify.obj" "tx_trace_disable.obj" "tx_trace_enable.obj" "tx_trace_event_filter.obj" "tx_trace_event_unfilter.obj" "tx_trace_initialize.obj" "tx_trace_interrupt_control.obj" "tx_trace_isr_enter_insert.obj" "tx_trace_isr_exit_insert.obj" "tx_trace_object_register.obj" "tx_trace_object_unregister.obj" "tx_trace_user_event_insert.obj" "txe_block_allocate.obj" "txe_block_pool_create.obj" "txe_block_pool_delete.obj" "txe_block_pool_info_get.obj" "txe_block_pool_prioritize.obj" "txe_block_release.obj" "txe_byte_allocate.obj" "txe_byte_pool_create.obj" "txe_byte_pool_delete.obj" "txe_byte_pool_info_get.obj"
- -$(RM) "txe_byte_pool_prioritize.obj" "txe_byte_release.obj" "txe_event_flags_create.obj" "txe_event_flags_delete.obj" "txe_event_flags_get.obj" "txe_event_flags_info_get.obj" "txe_event_flags_set.obj" "txe_event_flags_set_notify.obj" "txe_mutex_create.obj" "txe_mutex_delete.obj" "txe_mutex_get.obj" "txe_mutex_info_get.obj" "txe_mutex_prioritize.obj" "txe_mutex_put.obj" "txe_queue_create.obj" "txe_queue_delete.obj" "txe_queue_flush.obj" "txe_queue_front_send.obj" "txe_queue_info_get.obj" "txe_queue_prioritize.obj" "txe_queue_receive.obj" "txe_queue_send.obj" "txe_queue_send_notify.obj" "txe_semaphore_ceiling_put.obj" "txe_semaphore_create.obj" "txe_semaphore_delete.obj" "txe_semaphore_get.obj" "txe_semaphore_info_get.obj" "txe_semaphore_prioritize.obj" "txe_semaphore_put.obj" "txe_semaphore_put_notify.obj" "txe_thread_create.obj" "txe_thread_delete.obj" "txe_thread_entry_exit_notify.obj" "txe_thread_info_get.obj" "txe_thread_preemption_change.obj" "txe_thread_priority_change.obj" "txe_thread_relinquish.obj"
- -$(RM) "txe_thread_reset.obj" "txe_thread_resume.obj" "txe_thread_suspend.obj" "txe_thread_terminate.obj" "txe_thread_time_slice_change.obj" "txe_thread_wait_abort.obj" "txe_timer_activate.obj" "txe_timer_change.obj" "txe_timer_create.obj" "txe_timer_deactivate.obj" "txe_timer_delete.obj" "txe_timer_info_get.obj"
- -$(RM) "tx_block_allocate.d" "tx_block_pool_cleanup.d" "tx_block_pool_create.d" "tx_block_pool_delete.d" "tx_block_pool_info_get.d" "tx_block_pool_initialize.d" "tx_block_pool_performance_info_get.d" "tx_block_pool_performance_system_info_get.d" "tx_block_pool_prioritize.d" "tx_block_release.d" "tx_byte_allocate.d" "tx_byte_pool_cleanup.d" "tx_byte_pool_create.d" "tx_byte_pool_delete.d" "tx_byte_pool_info_get.d" "tx_byte_pool_initialize.d" "tx_byte_pool_performance_info_get.d" "tx_byte_pool_performance_system_info_get.d" "tx_byte_pool_prioritize.d" "tx_byte_pool_search.d" "tx_byte_release.d" "tx_event_flags_cleanup.d" "tx_event_flags_create.d" "tx_event_flags_delete.d" "tx_event_flags_get.d" "tx_event_flags_info_get.d" "tx_event_flags_initialize.d" "tx_event_flags_performance_info_get.d" "tx_event_flags_performance_system_info_get.d" "tx_event_flags_set.d" "tx_event_flags_set_notify.d" "tx_initialize_high_level.d" "tx_initialize_kernel_enter.d" "tx_initialize_kernel_setup.d" "tx_mutex_cleanup.d"
- -$(RM) "tx_mutex_create.d" "tx_mutex_delete.d" "tx_mutex_get.d" "tx_mutex_info_get.d" "tx_mutex_initialize.d" "tx_mutex_performance_info_get.d" "tx_mutex_performance_system_info_get.d" "tx_mutex_prioritize.d" "tx_mutex_priority_change.d" "tx_mutex_put.d" "tx_queue_cleanup.d" "tx_queue_create.d" "tx_queue_delete.d" "tx_queue_flush.d" "tx_queue_front_send.d" "tx_queue_info_get.d" "tx_queue_initialize.d" "tx_queue_performance_info_get.d" "tx_queue_performance_system_info_get.d" "tx_queue_prioritize.d" "tx_queue_receive.d" "tx_queue_send.d" "tx_queue_send_notify.d" "tx_semaphore_ceiling_put.d" "tx_semaphore_cleanup.d" "tx_semaphore_create.d" "tx_semaphore_delete.d" "tx_semaphore_get.d" "tx_semaphore_info_get.d" "tx_semaphore_initialize.d" "tx_semaphore_performance_info_get.d" "tx_semaphore_performance_system_info_get.d" "tx_semaphore_prioritize.d" "tx_semaphore_put.d" "tx_semaphore_put_notify.d" "tx_thread_create.d" "tx_thread_delete.d" "tx_thread_entry_exit_notify.d" "tx_thread_identify.d" "tx_thread_info_get.d"
- -$(RM) "tx_thread_initialize.d" "tx_thread_performance_info_get.d" "tx_thread_performance_system_info_get.d" "tx_thread_preemption_change.d" "tx_thread_priority_change.d" "tx_thread_relinquish.d" "tx_thread_reset.d" "tx_thread_resume.d" "tx_thread_shell_entry.d" "tx_thread_sleep.d" "tx_thread_stack_analyze.d" "tx_thread_stack_error_handler.d" "tx_thread_stack_error_notify.d" "tx_thread_suspend.d" "tx_thread_system_preempt_check.d" "tx_thread_system_resume.d" "tx_thread_system_suspend.d" "tx_thread_terminate.d" "tx_thread_time_slice.d" "tx_thread_time_slice_change.d" "tx_thread_timeout.d" "tx_thread_wait_abort.d" "tx_time_get.d" "tx_time_set.d" "tx_timer_activate.d" "tx_timer_change.d" "tx_timer_create.d" "tx_timer_deactivate.d" "tx_timer_delete.d" "tx_timer_expiration_process.d" "tx_timer_info_get.d" "tx_timer_initialize.d" "tx_timer_performance_info_get.d" "tx_timer_performance_system_info_get.d" "tx_timer_system_activate.d" "tx_timer_system_deactivate.d" "tx_timer_thread_entry.d" "tx_trace_buffer_full_notify.d"
- -$(RM) "tx_trace_disable.d" "tx_trace_enable.d" "tx_trace_event_filter.d" "tx_trace_event_unfilter.d" "tx_trace_initialize.d" "tx_trace_interrupt_control.d" "tx_trace_isr_enter_insert.d" "tx_trace_isr_exit_insert.d" "tx_trace_object_register.d" "tx_trace_object_unregister.d" "tx_trace_user_event_insert.d" "txe_block_allocate.d" "txe_block_pool_create.d" "txe_block_pool_delete.d" "txe_block_pool_info_get.d" "txe_block_pool_prioritize.d" "txe_block_release.d" "txe_byte_allocate.d" "txe_byte_pool_create.d" "txe_byte_pool_delete.d" "txe_byte_pool_info_get.d" "txe_byte_pool_prioritize.d" "txe_byte_release.d" "txe_event_flags_create.d" "txe_event_flags_delete.d" "txe_event_flags_get.d" "txe_event_flags_info_get.d" "txe_event_flags_set.d" "txe_event_flags_set_notify.d" "txe_mutex_create.d" "txe_mutex_delete.d" "txe_mutex_get.d" "txe_mutex_info_get.d" "txe_mutex_prioritize.d" "txe_mutex_put.d" "txe_queue_create.d" "txe_queue_delete.d" "txe_queue_flush.d" "txe_queue_front_send.d" "txe_queue_info_get.d"
- -$(RM) "txe_queue_prioritize.d" "txe_queue_receive.d" "txe_queue_send.d" "txe_queue_send_notify.d" "txe_semaphore_ceiling_put.d" "txe_semaphore_create.d" "txe_semaphore_delete.d" "txe_semaphore_get.d" "txe_semaphore_info_get.d" "txe_semaphore_prioritize.d" "txe_semaphore_put.d" "txe_semaphore_put_notify.d" "txe_thread_create.d" "txe_thread_delete.d" "txe_thread_entry_exit_notify.d" "txe_thread_info_get.d" "txe_thread_preemption_change.d" "txe_thread_priority_change.d" "txe_thread_relinquish.d" "txe_thread_reset.d" "txe_thread_resume.d" "txe_thread_suspend.d" "txe_thread_terminate.d" "txe_thread_time_slice_change.d" "txe_thread_wait_abort.d" "txe_timer_activate.d" "txe_timer_change.d" "txe_timer_create.d" "txe_timer_deactivate.d" "txe_timer_delete.d" "txe_timer_info_get.d"
- -$(RM) "tx_thread_context_restore.d" "tx_thread_context_save.d" "tx_thread_interrupt_control.d" "tx_thread_schedule.d" "tx_thread_stack_build.d" "tx_thread_system_return.d" "tx_timer_interrupt.d"
+ -$(RM) "tx_block_allocate.obj" "tx_block_pool_cleanup.obj" "tx_block_pool_create.obj" "tx_block_pool_delete.obj" "tx_block_pool_info_get.obj" "tx_block_pool_initialize.obj" "tx_block_pool_performance_info_get.obj" "tx_block_pool_performance_system_info_get.obj" "tx_block_pool_prioritize.obj" "tx_block_release.obj" "tx_byte_allocate.obj" "tx_byte_pool_cleanup.obj" "tx_byte_pool_create.obj" "tx_byte_pool_delete.obj" "tx_byte_pool_info_get.obj" "tx_byte_pool_initialize.obj" "tx_byte_pool_performance_info_get.obj" "tx_byte_pool_performance_system_info_get.obj" "tx_byte_pool_prioritize.obj" "tx_byte_pool_search.obj" "tx_byte_release.obj" "tx_event_flags_cleanup.obj" "tx_event_flags_create.obj" "tx_event_flags_delete.obj" "tx_event_flags_get.obj" "tx_event_flags_info_get.obj" "tx_event_flags_initialize.obj" "tx_event_flags_performance_info_get.obj" "tx_event_flags_performance_system_info_get.obj" "tx_event_flags_set.obj" "tx_event_flags_set_notify.obj" "tx_initialize_high_level.obj" "tx_initialize_kernel_enter.obj"
+ -$(RM) "tx_initialize_kernel_setup.obj" "tx_mutex_cleanup.obj" "tx_mutex_create.obj" "tx_mutex_delete.obj" "tx_mutex_get.obj" "tx_mutex_info_get.obj" "tx_mutex_initialize.obj" "tx_mutex_performance_info_get.obj" "tx_mutex_performance_system_info_get.obj" "tx_mutex_prioritize.obj" "tx_mutex_priority_change.obj" "tx_mutex_put.obj" "tx_queue_cleanup.obj" "tx_queue_create.obj" "tx_queue_delete.obj" "tx_queue_flush.obj" "tx_queue_front_send.obj" "tx_queue_info_get.obj" "tx_queue_initialize.obj" "tx_queue_performance_info_get.obj" "tx_queue_performance_system_info_get.obj" "tx_queue_prioritize.obj" "tx_queue_receive.obj" "tx_queue_send.obj" "tx_queue_send_notify.obj" "tx_semaphore_ceiling_put.obj" "tx_semaphore_cleanup.obj" "tx_semaphore_create.obj" "tx_semaphore_delete.obj" "tx_semaphore_get.obj" "tx_semaphore_info_get.obj" "tx_semaphore_initialize.obj" "tx_semaphore_performance_info_get.obj" "tx_semaphore_performance_system_info_get.obj" "tx_semaphore_prioritize.obj" "tx_semaphore_put.obj" "tx_semaphore_put_notify.obj"
+ -$(RM) "tx_thread_context_restore.obj" "tx_thread_context_save.obj" "tx_thread_create.obj" "tx_thread_delete.obj" "tx_thread_entry_exit_notify.obj" "tx_thread_identify.obj" "tx_thread_info_get.obj" "tx_thread_initialize.obj" "tx_thread_interrupt_control.obj" "tx_thread_performance_info_get.obj" "tx_thread_performance_system_info_get.obj" "tx_thread_preemption_change.obj" "tx_thread_priority_change.obj" "tx_thread_relinquish.obj" "tx_thread_reset.obj" "tx_thread_resume.obj" "tx_thread_schedule.obj" "tx_thread_shell_entry.obj" "tx_thread_sleep.obj" "tx_thread_stack_analyze.obj" "tx_thread_stack_build.obj" "tx_thread_stack_error_handler.obj" "tx_thread_stack_error_notify.obj" "tx_thread_suspend.obj" "tx_thread_system_preempt_check.obj" "tx_thread_system_resume.obj" "tx_thread_system_return.obj" "tx_thread_system_suspend.obj" "tx_thread_terminate.obj" "tx_thread_time_slice.obj" "tx_thread_time_slice_change.obj" "tx_thread_timeout.obj" "tx_thread_wait_abort.obj" "tx_time_get.obj" "tx_time_set.obj"
+ -$(RM) "tx_timer_activate.obj" "tx_timer_change.obj" "tx_timer_create.obj" "tx_timer_deactivate.obj" "tx_timer_delete.obj" "tx_timer_expiration_process.obj" "tx_timer_info_get.obj" "tx_timer_initialize.obj" "tx_timer_interrupt.obj" "tx_timer_performance_info_get.obj" "tx_timer_performance_system_info_get.obj" "tx_timer_system_activate.obj" "tx_timer_system_deactivate.obj" "tx_timer_thread_entry.obj" "tx_trace_buffer_full_notify.obj" "tx_trace_disable.obj" "tx_trace_enable.obj" "tx_trace_event_filter.obj" "tx_trace_event_unfilter.obj" "tx_trace_initialize.obj" "tx_trace_interrupt_control.obj" "tx_trace_isr_enter_insert.obj" "tx_trace_isr_exit_insert.obj" "tx_trace_object_register.obj" "tx_trace_object_unregister.obj" "tx_trace_user_event_insert.obj" "txe_block_allocate.obj" "txe_block_pool_create.obj" "txe_block_pool_delete.obj" "txe_block_pool_info_get.obj" "txe_block_pool_prioritize.obj" "txe_block_release.obj" "txe_byte_allocate.obj" "txe_byte_pool_create.obj" "txe_byte_pool_delete.obj" "txe_byte_pool_info_get.obj"
+ -$(RM) "txe_byte_pool_prioritize.obj" "txe_byte_release.obj" "txe_event_flags_create.obj" "txe_event_flags_delete.obj" "txe_event_flags_get.obj" "txe_event_flags_info_get.obj" "txe_event_flags_set.obj" "txe_event_flags_set_notify.obj" "txe_mutex_create.obj" "txe_mutex_delete.obj" "txe_mutex_get.obj" "txe_mutex_info_get.obj" "txe_mutex_prioritize.obj" "txe_mutex_put.obj" "txe_queue_create.obj" "txe_queue_delete.obj" "txe_queue_flush.obj" "txe_queue_front_send.obj" "txe_queue_info_get.obj" "txe_queue_prioritize.obj" "txe_queue_receive.obj" "txe_queue_send.obj" "txe_queue_send_notify.obj" "txe_semaphore_ceiling_put.obj" "txe_semaphore_create.obj" "txe_semaphore_delete.obj" "txe_semaphore_get.obj" "txe_semaphore_info_get.obj" "txe_semaphore_prioritize.obj" "txe_semaphore_put.obj" "txe_semaphore_put_notify.obj" "txe_thread_create.obj" "txe_thread_delete.obj" "txe_thread_entry_exit_notify.obj" "txe_thread_info_get.obj" "txe_thread_preemption_change.obj" "txe_thread_priority_change.obj" "txe_thread_relinquish.obj"
+ -$(RM) "txe_thread_reset.obj" "txe_thread_resume.obj" "txe_thread_suspend.obj" "txe_thread_terminate.obj" "txe_thread_time_slice_change.obj" "txe_thread_wait_abort.obj" "txe_timer_activate.obj" "txe_timer_change.obj" "txe_timer_create.obj" "txe_timer_deactivate.obj" "txe_timer_delete.obj" "txe_timer_info_get.obj"
+ -$(RM) "tx_block_allocate.d" "tx_block_pool_cleanup.d" "tx_block_pool_create.d" "tx_block_pool_delete.d" "tx_block_pool_info_get.d" "tx_block_pool_initialize.d" "tx_block_pool_performance_info_get.d" "tx_block_pool_performance_system_info_get.d" "tx_block_pool_prioritize.d" "tx_block_release.d" "tx_byte_allocate.d" "tx_byte_pool_cleanup.d" "tx_byte_pool_create.d" "tx_byte_pool_delete.d" "tx_byte_pool_info_get.d" "tx_byte_pool_initialize.d" "tx_byte_pool_performance_info_get.d" "tx_byte_pool_performance_system_info_get.d" "tx_byte_pool_prioritize.d" "tx_byte_pool_search.d" "tx_byte_release.d" "tx_event_flags_cleanup.d" "tx_event_flags_create.d" "tx_event_flags_delete.d" "tx_event_flags_get.d" "tx_event_flags_info_get.d" "tx_event_flags_initialize.d" "tx_event_flags_performance_info_get.d" "tx_event_flags_performance_system_info_get.d" "tx_event_flags_set.d" "tx_event_flags_set_notify.d" "tx_initialize_high_level.d" "tx_initialize_kernel_enter.d" "tx_initialize_kernel_setup.d" "tx_mutex_cleanup.d"
+ -$(RM) "tx_mutex_create.d" "tx_mutex_delete.d" "tx_mutex_get.d" "tx_mutex_info_get.d" "tx_mutex_initialize.d" "tx_mutex_performance_info_get.d" "tx_mutex_performance_system_info_get.d" "tx_mutex_prioritize.d" "tx_mutex_priority_change.d" "tx_mutex_put.d" "tx_queue_cleanup.d" "tx_queue_create.d" "tx_queue_delete.d" "tx_queue_flush.d" "tx_queue_front_send.d" "tx_queue_info_get.d" "tx_queue_initialize.d" "tx_queue_performance_info_get.d" "tx_queue_performance_system_info_get.d" "tx_queue_prioritize.d" "tx_queue_receive.d" "tx_queue_send.d" "tx_queue_send_notify.d" "tx_semaphore_ceiling_put.d" "tx_semaphore_cleanup.d" "tx_semaphore_create.d" "tx_semaphore_delete.d" "tx_semaphore_get.d" "tx_semaphore_info_get.d" "tx_semaphore_initialize.d" "tx_semaphore_performance_info_get.d" "tx_semaphore_performance_system_info_get.d" "tx_semaphore_prioritize.d" "tx_semaphore_put.d" "tx_semaphore_put_notify.d" "tx_thread_create.d" "tx_thread_delete.d" "tx_thread_entry_exit_notify.d" "tx_thread_identify.d" "tx_thread_info_get.d"
+ -$(RM) "tx_thread_initialize.d" "tx_thread_performance_info_get.d" "tx_thread_performance_system_info_get.d" "tx_thread_preemption_change.d" "tx_thread_priority_change.d" "tx_thread_relinquish.d" "tx_thread_reset.d" "tx_thread_resume.d" "tx_thread_shell_entry.d" "tx_thread_sleep.d" "tx_thread_stack_analyze.d" "tx_thread_stack_error_handler.d" "tx_thread_stack_error_notify.d" "tx_thread_suspend.d" "tx_thread_system_preempt_check.d" "tx_thread_system_resume.d" "tx_thread_system_suspend.d" "tx_thread_terminate.d" "tx_thread_time_slice.d" "tx_thread_time_slice_change.d" "tx_thread_timeout.d" "tx_thread_wait_abort.d" "tx_time_get.d" "tx_time_set.d" "tx_timer_activate.d" "tx_timer_change.d" "tx_timer_create.d" "tx_timer_deactivate.d" "tx_timer_delete.d" "tx_timer_expiration_process.d" "tx_timer_info_get.d" "tx_timer_initialize.d" "tx_timer_performance_info_get.d" "tx_timer_performance_system_info_get.d" "tx_timer_system_activate.d" "tx_timer_system_deactivate.d" "tx_timer_thread_entry.d" "tx_trace_buffer_full_notify.d"
+ -$(RM) "tx_trace_disable.d" "tx_trace_enable.d" "tx_trace_event_filter.d" "tx_trace_event_unfilter.d" "tx_trace_initialize.d" "tx_trace_interrupt_control.d" "tx_trace_isr_enter_insert.d" "tx_trace_isr_exit_insert.d" "tx_trace_object_register.d" "tx_trace_object_unregister.d" "tx_trace_user_event_insert.d" "txe_block_allocate.d" "txe_block_pool_create.d" "txe_block_pool_delete.d" "txe_block_pool_info_get.d" "txe_block_pool_prioritize.d" "txe_block_release.d" "txe_byte_allocate.d" "txe_byte_pool_create.d" "txe_byte_pool_delete.d" "txe_byte_pool_info_get.d" "txe_byte_pool_prioritize.d" "txe_byte_release.d" "txe_event_flags_create.d" "txe_event_flags_delete.d" "txe_event_flags_get.d" "txe_event_flags_info_get.d" "txe_event_flags_set.d" "txe_event_flags_set_notify.d" "txe_mutex_create.d" "txe_mutex_delete.d" "txe_mutex_get.d" "txe_mutex_info_get.d" "txe_mutex_prioritize.d" "txe_mutex_put.d" "txe_queue_create.d" "txe_queue_delete.d" "txe_queue_flush.d" "txe_queue_front_send.d" "txe_queue_info_get.d"
+ -$(RM) "txe_queue_prioritize.d" "txe_queue_receive.d" "txe_queue_send.d" "txe_queue_send_notify.d" "txe_semaphore_ceiling_put.d" "txe_semaphore_create.d" "txe_semaphore_delete.d" "txe_semaphore_get.d" "txe_semaphore_info_get.d" "txe_semaphore_prioritize.d" "txe_semaphore_put.d" "txe_semaphore_put_notify.d" "txe_thread_create.d" "txe_thread_delete.d" "txe_thread_entry_exit_notify.d" "txe_thread_info_get.d" "txe_thread_preemption_change.d" "txe_thread_priority_change.d" "txe_thread_relinquish.d" "txe_thread_reset.d" "txe_thread_resume.d" "txe_thread_suspend.d" "txe_thread_terminate.d" "txe_thread_time_slice_change.d" "txe_thread_wait_abort.d" "txe_timer_activate.d" "txe_timer_change.d" "txe_timer_create.d" "txe_timer_deactivate.d" "txe_timer_delete.d" "txe_timer_info_get.d"
+ -$(RM) "tx_thread_context_restore.d" "tx_thread_context_save.d" "tx_thread_interrupt_control.d" "tx_thread_schedule.d" "tx_thread_stack_build.d" "tx_thread_system_return.d" "tx_timer_interrupt.d"
-@echo 'Finished clean'
-@echo ' '
diff --git a/ports/c667x/ccs/example_build/tx/Release/sources.mk b/ports/c667x/ccs/example_build/tx/Release/sources.mk
index 9cbc2a269..95c7e8c3e 100644
--- a/ports/c667x/ccs/example_build/tx/Release/sources.mk
+++ b/ports/c667x/ccs/example_build/tx/Release/sources.mk
@@ -2,107 +2,107 @@
# Automatically-generated file. Do not edit!
################################################################################
-C55_SRCS :=
-A_SRCS :=
-ASM_UPPER_SRCS :=
-LDS_UPPER_SRCS :=
-CPP_SRCS :=
-CMD_SRCS :=
-O_SRCS :=
-C??_SRCS :=
-C64_SRCS :=
-C67_SRCS :=
-SA_SRCS :=
-S64_SRCS :=
-OPT_SRCS :=
-CXX_SRCS :=
-S67_SRCS :=
-S??_SRCS :=
-PDE_SRCS :=
-SV7A_SRCS :=
-K_SRCS :=
-CLA_SRCS :=
-S55_SRCS :=
-LD_UPPER_SRCS :=
-INO_SRCS :=
-LIB_SRCS :=
-ASM_SRCS :=
-S_UPPER_SRCS :=
-S43_SRCS :=
-LD_SRCS :=
-CMD_UPPER_SRCS :=
-C_UPPER_SRCS :=
-C++_SRCS :=
-C43_SRCS :=
-OBJ_SRCS :=
-LDS_SRCS :=
-S_SRCS :=
-CC_SRCS :=
-S62_SRCS :=
-C62_SRCS :=
-C_SRCS :=
-C55_DEPS :=
-C_UPPER_DEPS :=
-S67_DEPS :=
-S62_DEPS :=
-S_DEPS :=
-OPT_DEPS :=
-C??_DEPS :=
-ASM_UPPER_DEPS :=
-S??_DEPS :=
-C64_DEPS :=
-CXX_DEPS :=
-S64_DEPS :=
-INO_DEPS :=
-CLA_DEPS :=
-S55_DEPS :=
-SV7A_DEPS :=
-C62_DEPS :=
-C67_DEPS :=
-PDE_DEPS :=
-K_DEPS :=
-C_DEPS :=
-LIB_OUTPUTS :=
-CC_DEPS :=
-C++_DEPS :=
-C43_DEPS :=
-S43_DEPS :=
-OBJS :=
-ASM_DEPS :=
-S_UPPER_DEPS :=
-CPP_DEPS :=
-SA_DEPS :=
-C++_DEPS__QUOTED :=
-OPT_DEPS__QUOTED :=
-S_UPPER_DEPS__QUOTED :=
-SA_DEPS__QUOTED :=
-C??_DEPS__QUOTED :=
-S67_DEPS__QUOTED :=
-C55_DEPS__QUOTED :=
-CC_DEPS__QUOTED :=
-ASM_UPPER_DEPS__QUOTED :=
-SV7A_DEPS__QUOTED :=
-S??_DEPS__QUOTED :=
-OBJS__QUOTED :=
-C67_DEPS__QUOTED :=
-LIB_OUTPUTS__QUOTED :=
-K_DEPS__QUOTED :=
-S55_DEPS__QUOTED :=
-INO_DEPS__QUOTED :=
-C62_DEPS__QUOTED :=
-C_DEPS__QUOTED :=
-C_UPPER_DEPS__QUOTED :=
-C43_DEPS__QUOTED :=
-CPP_DEPS__QUOTED :=
-C64_DEPS__QUOTED :=
-CXX_DEPS__QUOTED :=
-CLA_DEPS__QUOTED :=
-S_DEPS__QUOTED :=
-ASM_DEPS__QUOTED :=
-S43_DEPS__QUOTED :=
-S64_DEPS__QUOTED :=
-S62_DEPS__QUOTED :=
-PDE_DEPS__QUOTED :=
+C55_SRCS :=
+A_SRCS :=
+ASM_UPPER_SRCS :=
+LDS_UPPER_SRCS :=
+CPP_SRCS :=
+CMD_SRCS :=
+O_SRCS :=
+C??_SRCS :=
+C64_SRCS :=
+C67_SRCS :=
+SA_SRCS :=
+S64_SRCS :=
+OPT_SRCS :=
+CXX_SRCS :=
+S67_SRCS :=
+S??_SRCS :=
+PDE_SRCS :=
+SV7A_SRCS :=
+K_SRCS :=
+CLA_SRCS :=
+S55_SRCS :=
+LD_UPPER_SRCS :=
+INO_SRCS :=
+LIB_SRCS :=
+ASM_SRCS :=
+S_UPPER_SRCS :=
+S43_SRCS :=
+LD_SRCS :=
+CMD_UPPER_SRCS :=
+C_UPPER_SRCS :=
+C++_SRCS :=
+C43_SRCS :=
+OBJ_SRCS :=
+LDS_SRCS :=
+S_SRCS :=
+CC_SRCS :=
+S62_SRCS :=
+C62_SRCS :=
+C_SRCS :=
+C55_DEPS :=
+C_UPPER_DEPS :=
+S67_DEPS :=
+S62_DEPS :=
+S_DEPS :=
+OPT_DEPS :=
+C??_DEPS :=
+ASM_UPPER_DEPS :=
+S??_DEPS :=
+C64_DEPS :=
+CXX_DEPS :=
+S64_DEPS :=
+INO_DEPS :=
+CLA_DEPS :=
+S55_DEPS :=
+SV7A_DEPS :=
+C62_DEPS :=
+C67_DEPS :=
+PDE_DEPS :=
+K_DEPS :=
+C_DEPS :=
+LIB_OUTPUTS :=
+CC_DEPS :=
+C++_DEPS :=
+C43_DEPS :=
+S43_DEPS :=
+OBJS :=
+ASM_DEPS :=
+S_UPPER_DEPS :=
+CPP_DEPS :=
+SA_DEPS :=
+C++_DEPS__QUOTED :=
+OPT_DEPS__QUOTED :=
+S_UPPER_DEPS__QUOTED :=
+SA_DEPS__QUOTED :=
+C??_DEPS__QUOTED :=
+S67_DEPS__QUOTED :=
+C55_DEPS__QUOTED :=
+CC_DEPS__QUOTED :=
+ASM_UPPER_DEPS__QUOTED :=
+SV7A_DEPS__QUOTED :=
+S??_DEPS__QUOTED :=
+OBJS__QUOTED :=
+C67_DEPS__QUOTED :=
+LIB_OUTPUTS__QUOTED :=
+K_DEPS__QUOTED :=
+S55_DEPS__QUOTED :=
+INO_DEPS__QUOTED :=
+C62_DEPS__QUOTED :=
+C_DEPS__QUOTED :=
+C_UPPER_DEPS__QUOTED :=
+C43_DEPS__QUOTED :=
+CPP_DEPS__QUOTED :=
+C64_DEPS__QUOTED :=
+CXX_DEPS__QUOTED :=
+CLA_DEPS__QUOTED :=
+S_DEPS__QUOTED :=
+ASM_DEPS__QUOTED :=
+S43_DEPS__QUOTED :=
+S64_DEPS__QUOTED :=
+S62_DEPS__QUOTED :=
+PDE_DEPS__QUOTED :=
# Every subdirectory with source files must be described here
SUBDIRS := \
diff --git a/ports/c667x/ccs/example_build/tx/Release/subdir_vars.mk b/ports/c667x/ccs/example_build/tx/Release/subdir_vars.mk
index 6a6a3ffd4..70ef8b01e 100644
--- a/ports/c667x/ccs/example_build/tx/Release/subdir_vars.mk
+++ b/ports/c667x/ccs/example_build/tx/Release/subdir_vars.mk
@@ -4,7 +4,7 @@
SHELL = cmd.exe
-# Add inputs and outputs from these tool invocations to the build variables
+# Add inputs and outputs from these tool invocations to the build variables
ASM_SRCS += \
../tx_thread_context_restore.asm \
../tx_thread_context_save.asm \
@@ -12,7 +12,7 @@ ASM_SRCS += \
../tx_thread_schedule.asm \
../tx_thread_stack_build.asm \
../tx_thread_system_return.asm \
-../tx_timer_interrupt.asm
+../tx_timer_interrupt.asm
C_SRCS += \
../tx_block_allocate.c \
@@ -198,7 +198,7 @@ C_SRCS += \
../txe_timer_create.c \
../txe_timer_deactivate.c \
../txe_timer_delete.c \
-../txe_timer_info_get.c
+../txe_timer_info_get.c
C_DEPS += \
./tx_block_allocate.d \
@@ -384,7 +384,7 @@ C_DEPS += \
./txe_timer_create.d \
./txe_timer_deactivate.d \
./txe_timer_delete.d \
-./txe_timer_info_get.d
+./txe_timer_info_get.d
OBJS += \
./tx_block_allocate.obj \
@@ -577,7 +577,7 @@ OBJS += \
./txe_timer_create.obj \
./txe_timer_deactivate.obj \
./txe_timer_delete.obj \
-./txe_timer_info_get.obj
+./txe_timer_info_get.obj
ASM_DEPS += \
./tx_thread_context_restore.d \
@@ -586,7 +586,7 @@ ASM_DEPS += \
./tx_thread_schedule.d \
./tx_thread_stack_build.d \
./tx_thread_system_return.d \
-./tx_timer_interrupt.d
+./tx_timer_interrupt.d
OBJS__QUOTED += \
"tx_block_allocate.obj" \
@@ -779,7 +779,7 @@ OBJS__QUOTED += \
"txe_timer_create.obj" \
"txe_timer_deactivate.obj" \
"txe_timer_delete.obj" \
-"txe_timer_info_get.obj"
+"txe_timer_info_get.obj"
C_DEPS__QUOTED += \
"tx_block_allocate.d" \
@@ -965,7 +965,7 @@ C_DEPS__QUOTED += \
"txe_timer_create.d" \
"txe_timer_deactivate.d" \
"txe_timer_delete.d" \
-"txe_timer_info_get.d"
+"txe_timer_info_get.d"
ASM_DEPS__QUOTED += \
"tx_thread_context_restore.d" \
@@ -974,7 +974,7 @@ ASM_DEPS__QUOTED += \
"tx_thread_schedule.d" \
"tx_thread_stack_build.d" \
"tx_thread_system_return.d" \
-"tx_timer_interrupt.d"
+"tx_timer_interrupt.d"
C_SRCS__QUOTED += \
"../tx_block_allocate.c" \
@@ -1160,7 +1160,7 @@ C_SRCS__QUOTED += \
"../txe_timer_create.c" \
"../txe_timer_deactivate.c" \
"../txe_timer_delete.c" \
-"../txe_timer_info_get.c"
+"../txe_timer_info_get.c"
ASM_SRCS__QUOTED += \
"../tx_thread_context_restore.asm" \
@@ -1169,6 +1169,6 @@ ASM_SRCS__QUOTED += \
"../tx_thread_schedule.asm" \
"../tx_thread_stack_build.asm" \
"../tx_thread_system_return.asm" \
-"../tx_timer_interrupt.asm"
+"../tx_timer_interrupt.asm"
diff --git a/ports/c667x/ccs/inc/tx_port.h b/ports/c667x/ccs/inc/tx_port.h
index 2cec57d35..6f5a9838f 100644
--- a/ports/c667x/ccs/inc/tx_port.h
+++ b/ports/c667x/ccs/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,10 +21,10 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
/* tx_port.h C667x/TI */
/* 6.1.11 */
/* */
@@ -32,28 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Wenhui Xie Modified comment(s), */
-/* optimized the definition of */
-/* TX_TIMER_TICKS_PER_SECOND, */
-/* resulting in version 6.1.11 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -66,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -80,7 +68,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -116,12 +104,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 2048 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX C6xxx port. */
+/* Define various constants for the ThreadX C6xxx port. */
#define TX_INT_DISABLE 0x00 /* Disable interrupts */
#define TX_INT_ENABLE 0x01 /* Enable interrupts */
@@ -132,8 +120,8 @@ typedef unsigned short USHORT;
#endif
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -162,7 +150,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -174,13 +162,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -196,11 +184,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_INTERNAL_EXTENSION ULONG tx_timer_internal_padding;
*/
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -208,8 +196,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -236,9 +224,9 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -269,8 +257,8 @@ unsigned int _tx_thread_interrupt_control(unsigned int);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX C667x/TI Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX C667x/TI Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/c667x/ccs/readme_threadx.txt b/ports/c667x/ccs/readme_threadx.txt
index 8826de45d..989f0b492 100644
--- a/ports/c667x/ccs/readme_threadx.txt
+++ b/ports/c667x/ccs/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for TMS320C667x
+ Microsoft's Azure RTOS ThreadX for TMS320C667x
Using the TI Code Composer Tools
@@ -17,73 +17,73 @@ It is assumed the tools are installed in the default directories:
CCS path by default - c:\ti\ccsv(version number)
MCSDK path by default - c:\ti
-If the packages are installed in different directories, the ThreadX project
+If the packages are installed in different directories, the ThreadX project
settings must be adjusted.
-2. Open the Azure RTOS Workspace
+2. Open the Azure RTOS Workspace
-In order to build the ThreadX library and the ThreadX demonstration first open
-the Azure RTOS Workspace inside your ThreadX installation directory.
+In order to build the ThreadX library and the ThreadX demonstration first open
+the Azure RTOS Workspace inside your ThreadX installation directory.
3. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply import the CCS project file
-"tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply import the CCS project file
+"tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.lib.
4. Demonstration System
-The ThreadX demonstration is designed to execute on the C6678EVM evaluation board.
+The ThreadX demonstration is designed to execute on the C6678EVM evaluation board.
Building the demonstration is easy; simply import the "sample_threadx_c6678evm" project.
-Now select "Project -> Build Active Project" to build the ThreadX demonstration,
-which produces the sample_threadx.out file in the "Debug" directory. You are now
+Now select "Project -> Build Active Project" to build the ThreadX demonstration,
+which produces the sample_threadx.out file in the "Debug" directory. You are now
ready to run the ThreadX demonstration on the C6678EVM evaluation board.
-Please refer to Chapter 6 of the ThreadX User Guide for a complete description
-of this demonstration.
+Please refer to Chapter 6 of the ThreadX User Guide for a complete description
+of this demonstration.
5. System Initialization
-The entry point in ThreadX for the TMS320C667x using the TI tools is at label
-_c_int00. This is defined within the TI library. In addition, this is
-where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the TMS320C667x using the TI tools is at label
+_c_int00. This is defined within the TI library. In addition, this is
+where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX initialization file tx_initialize_low_level.asm is responsible
-for setting up various system data structures, the vector area, and a periodic
-timer interrupt source. By default, the vector area is defined to be located in
-the "vectors" section, which is defined at the top of tx_initialize_low_level.asm.
-This area is located at address 0 for the demonstration.
+The ThreadX initialization file tx_initialize_low_level.asm is responsible
+for setting up various system data structures, the vector area, and a periodic
+timer interrupt source. By default, the vector area is defined to be located in
+the "vectors" section, which is defined at the top of tx_initialize_low_level.asm.
+This area is located at address 0 for the demonstration.
-tx_initialize_low_level.asm is also where initialization of a periodic timer
+tx_initialize_low_level.asm is also where initialization of a periodic timer
interrupt source should take place.
-In addition, _tx_initialize_low_level determines the first available address
-for use by the application. By default, free memory is assumed to start after
+In addition, _tx_initialize_low_level determines the first available address
+for use by the application. By default, free memory is assumed to start after
the .zend section in RAM (defined in tx_initialize_low_level). This section
must be placed at the end of your other RAM sections. Please see sample_threadx.cmd
-for an example. The address of this section is passed to the application definition
+for an example. The address of this section is passed to the application definition
function, tx_application_define.
6. Register Usage and Stack Frames
-The TI TMS320C667x compiler assumes that registers A0-A9, A16-A31, B0-B9, and
-B16-B31 are scratch registers for each function. All other registers used by
-a C function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved context
+The TI TMS320C667x compiler assumes that registers A0-A9, A16-A31, B0-B9, and
+B16-B31 are scratch registers for each function. All other registers used by
+a C function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved context
of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -101,10 +101,10 @@ associated thread control block TX_THREAD.
0x24 A4 A14
0x28 A5 A15
0x2C A6 B10
- 0x30 A7 B11
- 0x34 A8 B12
- 0x38 A9 B13
- 0x3C A10 ILC
+ 0x30 A7 B11
+ 0x34 A8 B12
+ 0x38 A9 B13
+ 0x3C A10 ILC
0x40 A11 RILC
0x44 A12
0x48 A13
@@ -159,38 +159,38 @@ associated thread control block TX_THREAD.
0x10C ILC
0x110 RILC
0x114 ITSR
-
+
7. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some performance.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some performance.
To make it run faster, you can replace the -g compiler option
-to a -O3 in the ThreadX project file to enable all compiler optimizations.
+to a -O3 in the ThreadX project file to enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
8. Interrupt Handling
-ThreadX provides complete and high-performance interrupt handling for
-TMS320C667x targets. There are a certain set of requirements that are
+ThreadX provides complete and high-performance interrupt handling for
+TMS320C667x targets. There are a certain set of requirements that are
defined in the following sub-sections:
8.1 Vector Area
-The TMS320C667x interrupt vectors at in the section "vectors" and is defined at
-the top of tx_initialize_low_level.asm. Each interrupt vector entry contains
-a jump to a template interrupt processing shell.
+The TMS320C667x interrupt vectors at in the section "vectors" and is defined at
+the top of tx_initialize_low_level.asm. Each interrupt vector entry contains
+a jump to a template interrupt processing shell.
8.2 Interrupt Service Routine Shells
-The following interrupt processing shells are defined at the bottom of
+The following interrupt processing shells are defined at the bottom of
tx_initialize_low_level.asm:
@@ -207,18 +207,18 @@ tx_initialize_low_level.asm:
__tx_int14_ISR
__tx_int15_ISR
-Each interrupt ISR is entered with B3, A0-A4 is available (these registers are
-saved in the initial vector processing). The default interrupt handling
+Each interrupt ISR is entered with B3, A0-A4 is available (these registers are
+saved in the initial vector processing). The default interrupt handling
includes calls to __tx_thread_context_save and __tx_thread_context_restore.
-Application ISR processing can be added between the context save/restore
+Application ISR processing can be added between the context save/restore
calls. Note that only the compiler scratch registers are available for use
after context save return to the ISR.
-High-frequency interrupt handlers might not want to perform context
-save/restore processing on each interrupt. If this is the case, any
+High-frequency interrupt handlers might not want to perform context
+save/restore processing on each interrupt. If this is the case, any
additional registers used must be saved and restored by the ISR and
the interrupt return processing must restore the registers saved by the
-initial vector processing. This can be accomplished by adding the
+initial vector processing. This can be accomplished by adding the
following code to the end of the custom ISR handling:
LDW *+SP(20),A0 ; Recover A0
diff --git a/ports/c667x/ccs/src/tx_thread_context_restore.asm b/ports/c667x/ccs/src/tx_thread_context_restore.asm
index 593881ba9..496e413ea 100644
--- a/ports/c667x/ccs/src/tx_thread_context_restore.asm
+++ b/ports/c667x/ccs/src/tx_thread_context_restore.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,41 +43,41 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -99,20 +99,20 @@ _tx_thread_context_restore:
; {
;
MVKL _tx_thread_system_state,A0 ; Build address of system state
- MVKH _tx_thread_system_state,A0 ;
+ MVKH _tx_thread_system_state,A0 ;
LDW *A0,A1 ; Pickup system state variable
MVKL _tx_thread_current_ptr,A2 ; Build address of current thread ptr
NOP 3 ; Delay slots
SUB A1,1,A1 ; Decrement system state
[!A1] B _tx_thread_not_nested_restore ; If 0, not a nested restore
- MVKH _tx_thread_current_ptr,A2 ;
+ MVKH _tx_thread_current_ptr,A2 ;
LDW *A2,A3 ; Pickup current thread pointer
STW A1,*A0 ; Store system state
NOP 2 ; Delay slots
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDW *+SP(8),B0 ; Recover saved CSR
@@ -196,19 +196,19 @@ _tx_thread_not_nested_restore:
MV A3,A1 ; Move thread pointer into A1
[!A1] B _tx_thread_schedule ; If null, idle system restore
MVKL _tx_thread_preempt_disable,A0 ; Build preempt disable flag address
- MVKH _tx_thread_preempt_disable,A0 ;
+ MVKH _tx_thread_preempt_disable,A0 ;
MVKL _tx_thread_execute_ptr,A4 ; Build execute thread pointer
- MVKH _tx_thread_execute_ptr,A4 ;
+ MVKH _tx_thread_execute_ptr,A4 ;
LDW *A0,B1 ; Pickup preempt disable flag
- LDW *A4,A6 ; Pickup next thread to execute
+ LDW *A4,A6 ; Pickup next thread to execute
NOP 4 ; Delay slot
CMPEQ A6,A1,A7 ; Determine if threads are the same?
ADD A7,B1,B1 ; Add results together
[B1] B _tx_thread_no_preempt_restore ; If set, skip preeemption
LDW *+A1(8),A6 ; Recover thread's stack pointer
MVKL _tx_timer_time_slice,A5 ; Build time slice address
- MVKH _tx_timer_time_slice,A5 ;
+ MVKH _tx_timer_time_slice,A5 ;
LDW *A5,B1 ; Pickup current time-slice
NOP ; Delay slot
;
diff --git a/ports/c667x/ccs/src/tx_thread_context_save.asm b/ports/c667x/ccs/src/tx_thread_context_save.asm
index 795f720e3..c6a6c307a 100644
--- a/ports/c667x/ccs/src/tx_thread_context_save.asm
+++ b/ports/c667x/ccs/src/tx_thread_context_save.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,40 +39,40 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -93,7 +93,7 @@ _tx_thread_context_save:
; {
;
MVKL _tx_thread_system_state,A0 ; Build address of system state
- MVKH _tx_thread_system_state,A0 ;
+ MVKH _tx_thread_system_state,A0 ;
LDW *A0,A1 ; Pickup current system state
STW A5,*+SP(40) ; Save A5
STW A6,*+SP(44) ; Save A6
@@ -101,7 +101,7 @@ _tx_thread_context_save:
STW A8,*+SP(52) ; Save A8
[!A1] B _tx_thread_not_nested_save ; If 0, not a nested save condition
MVKL _tx_thread_current_ptr,A3 ; Build address of current thread ptr
- MVKH _tx_thread_current_ptr,A3 ;
+ MVKH _tx_thread_current_ptr,A3 ;
LDW *A3,A2 ; Pickup current thread pointer
ADD 1,A1,A1 ; Increment the system state (nested) counter
STW A1,*A0 ; Store system state
@@ -261,7 +261,7 @@ _tx_thread_idle_system_save:
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to ISR
+; /* Not much to do here, just adjust the stack pointer, and return to ISR
; processing. */
;
B B3 ; Return to ISR
diff --git a/ports/c667x/ccs/src/tx_thread_interrupt_control.asm b/ports/c667x/ccs/src/tx_thread_interrupt_control.asm
index ff39fe91a..f43aee942 100644
--- a/ports/c667x/ccs/src/tx_thread_interrupt_control.asm
+++ b/ports/c667x/ccs/src/tx_thread_interrupt_control.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,39 +34,39 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
diff --git a/ports/c667x/ccs/src/tx_thread_schedule.asm b/ports/c667x/ccs/src/tx_thread_schedule.asm
index 2b40fec18..10d0b3ad4 100644
--- a/ports/c667x/ccs/src/tx_thread_schedule.asm
+++ b/ports/c667x/ccs/src/tx_thread_schedule.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,42 +40,42 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -92,7 +92,7 @@ _tx_thread_schedule
OR 1,B0,B0 ; Build interrupt enable value
MVC B0,CSR ; Enable interrupts
MVKL _tx_thread_execute_ptr,A0 ; Build address of execute pointer
- MVKH _tx_thread_execute_ptr,A0 ;
+ MVKH _tx_thread_execute_ptr,A0 ;
;
; /* Wait for a thread to execute. */
; do
@@ -106,13 +106,13 @@ _tx_thread_schedule_loop:
; to become ready
MV A1,A4 ; Move thread pointer to A4
MVKL _tx_thread_current_ptr,A1 ; Build address of current thread ptr
- MVKH _tx_thread_current_ptr,A1 ;
+ MVKH _tx_thread_current_ptr,A1 ;
MVKL _tx_timer_time_slice,A2 ; Build address of time-slice
- MVKH _tx_timer_time_slice,A2 ;
+ MVKH _tx_timer_time_slice,A2 ;
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
diff --git a/ports/c667x/ccs/src/tx_thread_stack_build.asm b/ports/c667x/ccs/src/tx_thread_stack_build.asm
index dabfea417..d6521d09f 100644
--- a/ports/c667x/ccs/src/tx_thread_stack_build.asm
+++ b/ports/c667x/ccs/src/tx_thread_stack_build.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,41 +34,41 @@ SP .set B15
ADDRESS_MSK .set 0xFFFFFFF0
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
+;/* */
+;/* CALLED BY */
+;/* */
;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -79,10 +79,10 @@ ADDRESS_MSK .set 0xFFFFFFF0
.global _tx_thread_stack_build
_tx_thread_stack_build:
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the C667x should look like the following after it is built:
-;
+;
; Stack Top: N/A Available for use
; 1 Interrupt stack frame type 4
; CSR Initial value for CSR 8
@@ -160,7 +160,7 @@ _tx_thread_stack_build:
;
LDW *+A4(16),A0 ; Pickup end of stack area
MVKL ADDRESS_MSK,A1 ; Build address mask
- MVKH ADDRESS_MSK,A1 ;
+ MVKH ADDRESS_MSK,A1 ;
MVC CSR,B0 ; Pickup current CSR
AND -2,B0,B0 ; Clear GIE bit
OR 2,B0,B0 ; Set PGIE bit for interrupt return
@@ -171,7 +171,7 @@ _tx_thread_stack_build:
; /* Actually build the stack frame. */
;
MVKL 1,A2 ; Build stack type
- ZERO A3 ; Clear value
+ ZERO A3 ; Clear value
STW A2,*+A0(4) ; Interrupt stack type
STW B0,*+A0(8) ; Initial CSR
STW B4,*+A0(12) ; Thread shell entry point
diff --git a/ports/c667x/ccs/src/tx_thread_system_return.asm b/ports/c667x/ccs/src/tx_thread_system_return.asm
index bf4c5caf8..5123958b2 100644
--- a/ports/c667x/ccs/src/tx_thread_system_return.asm
+++ b/ports/c667x/ccs/src/tx_thread_system_return.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,41 +40,41 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -109,7 +109,7 @@ _tx_thread_system_return:
MVC RILC,B1 ; Pickup RILC
STW B0,*+SP(60) ; Save ILC
STW B1,*+SP(64) ; Save RILC
-;
+;
; /* Lockout interrupts. */
;
AND -2,B0,B0 ; Build interrupt disable value
@@ -120,13 +120,13 @@ _tx_thread_system_return:
; SP = _tx_thread_system_stack_ptr;
;
MVKL _tx_timer_time_slice,A2 ; Pickup address of time slice
- MVKH _tx_timer_time_slice,A2 ;
+ MVKH _tx_timer_time_slice,A2 ;
LDW *A2,B0 ; Pickup time slice
MVKL _tx_thread_current_ptr,A1 ; Pickup address of current thread
- MVKH _tx_thread_current_ptr,A1 ;
+ MVKH _tx_thread_current_ptr,A1 ;
LDW *A1,A4 ; Pickup current thread pointer
MVKL _tx_thread_system_stack_ptr,A3 ; Pickup address of system stack
- MVKH _tx_thread_system_stack_ptr,A3 ;
+ MVKH _tx_thread_system_stack_ptr,A3 ;
;
; /* Determine if the time-slice is active. */
; if (_tx_timer_time_slice)
@@ -134,14 +134,14 @@ _tx_thread_system_return:
;
[!B0] B _tx_thread_dont_save_ts ; If no-time slice, skip save
NOP ; Delay slot
- STW SP,*+A4(8) ; Save thread's stack pointer
+ STW SP,*+A4(8) ; Save thread's stack pointer
LDW *A3,SP ; Switch to system stack pointer
NOP ; Delay slot
;
; /* Save time-slice for the thread and clear the current time-slice. */
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
; _tx_timer_time_slice = 0;
- NOP ;
+ NOP ;
STW B2,*A2 ; Clear time-slice
NOP 2 ; Delay slots
STW B0,*+A4(24) ; Save time-slice
diff --git a/ports/c667x/ccs/src/tx_timer_interrupt.asm b/ports/c667x/ccs/src/tx_timer_interrupt.asm
index 60dd91b60..48df12d70 100644
--- a/ports/c667x/ccs/src/tx_timer_interrupt.asm
+++ b/ports/c667x/ccs/src/tx_timer_interrupt.asm
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -48,45 +48,45 @@ SP .set B15
;
;
.sect ".text"
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt C667x/TI */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt C667x/TI */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_context_save Context save */
-;/* _tx_thread_context_restore Context restore */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
+;/* */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_context_save Context save */
+;/* _tx_thread_context_restore Context restore */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
;/* DATE NAME DESCRIPTION */
;/* */
;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -106,10 +106,10 @@ _tx_timer_interrupt:
; _tx_timer_system_clock++;
;
MVKL _tx_timer_system_clock,A0 ; Build address of system clock
- MVKH _tx_timer_system_clock,A0 ;
+ MVKH _tx_timer_system_clock,A0 ;
LDW *A0,A2 ; Pickup system clock
MVKL _tx_timer_time_slice,A3 ; Build address of time slice
- MVKH _tx_timer_time_slice,A3 ;
+ MVKH _tx_timer_time_slice,A3 ;
LDW *A3,A1 ; Pickup time slice
NOP 2 ; Delay
ADD 1,A2,A2 ; Increment the system clock
@@ -120,7 +120,7 @@ _tx_timer_interrupt:
; {
;
[!A1] B _tx_timer_no_time_slice ; If 0, skip time slice processing
- SUB A1,1,A1 ; Decrement time-slice value
+ SUB A1,1,A1 ; Decrement time-slice value
NOP 4 ; Delay slots
;
; /* Decrement the time_slice. */
@@ -130,9 +130,9 @@ _tx_timer_interrupt:
; if (_tx_timer_time_slice == 0)
;
[A1] B _tx_timer_no_time_slice ; If non-zero, not expired yet
- STW A1,*A3 ; Store new time-slice
+ STW A1,*A3 ; Store new time-slice
MVKL _tx_timer_expired_time_slice,A0 ; Build address of expired flag
- MVKH _tx_timer_expired_time_slice,A0 ;
+ MVKH _tx_timer_expired_time_slice,A0 ;
MVKL 1,A4 ; Expired flag
NOP ; Delay
;
@@ -149,10 +149,10 @@ _tx_timer_no_time_slice:
; {
;
MVKL _tx_timer_current_ptr,A2 ; Build address of current timer pointer
- MVKH _tx_timer_current_ptr,A2 ;
+ MVKH _tx_timer_current_ptr,A2 ;
LDW *A2,A0 ; Pickup timer list address
MVKL _tx_timer_expired,A3 ; Build address of expired flag
- MVKH _tx_timer_expired,A3 ;
+ MVKH _tx_timer_expired,A3 ;
NOP 2 ; Delay slots
LDW *A0,A1 ; Pickup current timer entry
ADD 4,A0,A0 ; Increment the current pointer
@@ -179,10 +179,10 @@ _tx_timer_no_timer:
; if (_tx_timer_current_ptr == _tx_timer_list_end)
;
MVKL _tx_timer_list_end,A3 ; Build timer list end address
- MVKH _tx_timer_list_end,A3 ;
+ MVKH _tx_timer_list_end,A3 ;
LDW *A3,A4 ; Pickup list end address
MVKL _tx_timer_list_start,A3 ; Build timer list start address
- MVKH _tx_timer_list_start,A3 ;
+ MVKH _tx_timer_list_start,A3 ;
NOP 2 ; Delay slots
CMPEQ A4,A0,A1 ; Compare current pointer with end
[A1] LDW *A3,A0 ; If at the end, pickup timer list start
@@ -205,10 +205,10 @@ _tx_timer_done:
; {
;
MVKL _tx_timer_expired_time_slice,A3 ; Build time-slice expired flag
- MVKH _tx_timer_expired_time_slice,A3 ;
+ MVKH _tx_timer_expired_time_slice,A3 ;
LDW *A3,A4 ; Pickup time-slice expired flag
MVKL _tx_timer_expired,A0 ; Build timer expired flag
- MVKH _tx_timer_expired,A0 ;
+ MVKH _tx_timer_expired,A0 ;
LDW *A0,A2 ; Pickup timer expired flag
NOP 4 ; Delay slots
OR A2,A4,A1 ; Combine expired flags
@@ -223,8 +223,8 @@ _tx_something_expired:
;
B _tx_thread_context_save ; Call context save routine
MVKL _tx_timer_ISR_return,B3 ; Build return address
- MVKH _tx_timer_ISR_return,B3 ;
- NOP 3 ; Delay slots
+ MVKH _tx_timer_ISR_return,B3 ;
+ NOP 3 ; Delay slots
_tx_timer_ISR_return:
;
; /* Did a timer expire? */
@@ -232,7 +232,7 @@ _tx_timer_ISR_return:
; {
;
MVKL _tx_timer_expired,A0 ; Build timer expired address
- MVKH _tx_timer_expired,A0 ;
+ MVKH _tx_timer_expired,A0 ;
LDW *A0,A1 ; Pickup expired flag
NOP 4 ; Delay slots
[!A1] B _tx_timer_dont_activate ; If not set, skip timer activation
@@ -243,7 +243,7 @@ _tx_timer_ISR_return:
;
B _tx_timer_expiration_process ; Process timer expiration
MVKL _tx_timer_ISR_return_1,B3 ; Build return address
- MVKH _tx_timer_ISR_return_1,B3 ;
+ MVKH _tx_timer_ISR_return_1,B3 ;
NOP 3 ; Delay slots
_tx_timer_ISR_return_1:
;
@@ -255,7 +255,7 @@ _tx_timer_dont_activate:
; {
;
MVKL _tx_timer_expired_time_slice,A0 ; Build address of expired flag
- MVKH _tx_timer_expired_time_slice,A0 ;
+ MVKH _tx_timer_expired_time_slice,A0 ;
LDW *A0,A1 ; Pickup expired flag
NOP 4 ; Delay slots
[!A1] B _tx_timer_not_ts_expiration ; If not set, skip time-slice processing
@@ -266,7 +266,7 @@ _tx_timer_dont_activate:
;
B _tx_thread_time_slice ; Call time-slice processing
MVKL _tx_timer_ISR_return_2,B3 ; Build return address
- MVKH _tx_timer_ISR_return_2,B3 ;
+ MVKH _tx_timer_ISR_return_2,B3 ;
NOP 3 ; Delay slots
_tx_timer_ISR_return_2:
;
diff --git a/ports/cortex_a12/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a12/ac6/example_build/sample_threadx/.cproject
index e212b36da..7882693e3 100644
--- a/ports/cortex_a12/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a12/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a12/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a12/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a12/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a12/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a12/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a12/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a12/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a12/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a12/ac6/example_build/tx/.cproject b/ports/cortex_a12/ac6/example_build/tx/.cproject
index c6b251b21..7580a13f4 100644
--- a/ports/cortex_a12/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a12/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a12/ac6/inc/tx_port.h b/ports/cortex_a12/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a12/ac6/inc/tx_port.h
+++ b/ports/cortex_a12/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a12/ac6/src/tx_thread_context_restore.S b/ports/cortex_a12/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a12/ac6/src/tx_thread_context_save.S b/ports/cortex_a12/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a12/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a12/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a12/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a12/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a12/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a12/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a12/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_schedule.S b/ports/cortex_a12/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a12/ac6/src/tx_thread_stack_build.S b/ports/cortex_a12/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_system_return.S b/ports/cortex_a12/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a12/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a12/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a12/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a12/ac6/src/tx_timer_interrupt.S b/ports/cortex_a12/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a12/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a12/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/example_build/reset.S b/ports/cortex_a12/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a12/gnu/example_build/reset.S
+++ b/ports/cortex_a12/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a12/gnu/example_build/sample_threadx.ld b/ports/cortex_a12/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a12/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a12/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a12/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a12/gnu/example_build/tx_initialize_low_level.S
index 88777dfd4..f9a572165 100644
--- a/ports/cortex_a12/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a12/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -95,17 +96,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a12/gnu/example_build/v7.h b/ports/cortex_a12/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a12/gnu/example_build/v7.h
+++ b/ports/cortex_a12/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a12/gnu/example_build/v7.s b/ports/cortex_a12/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a12/gnu/example_build/v7.s
+++ b/ports/cortex_a12/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a12/gnu/inc/tx_port.h b/ports/cortex_a12/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a12/gnu/inc/tx_port.h
+++ b/ports/cortex_a12/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a12/gnu/src/tx_thread_context_restore.S b/ports/cortex_a12/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a12/gnu/src/tx_thread_context_save.S b/ports/cortex_a12/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a12/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a12/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a12/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a12/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a12/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a12/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a12/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_schedule.S b/ports/cortex_a12/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a12/gnu/src/tx_thread_stack_build.S b/ports/cortex_a12/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_system_return.S b/ports/cortex_a12/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a12/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a12/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a12/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a12/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a12/gnu/src/tx_timer_interrupt.S b/ports/cortex_a12/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a12/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a12/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a15/ac6/example_build/sample_threadx/.cproject
index 9a96fceb9..abd7ce5b2 100644
--- a/ports/cortex_a15/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a15/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a15/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a15/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a15/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a15/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a15/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a15/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a15/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a15/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a15/ac6/example_build/tx/.cproject b/ports/cortex_a15/ac6/example_build/tx/.cproject
index e8ca6dd75..8b16e9398 100644
--- a/ports/cortex_a15/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a15/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a15/ac6/inc/tx_port.h b/ports/cortex_a15/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a15/ac6/inc/tx_port.h
+++ b/ports/cortex_a15/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a15/ac6/readme_threadx.txt b/ports/cortex_a15/ac6/readme_threadx.txt
index 8d81625ac..dbe89478c 100644
--- a/ports/cortex_a15/ac6/readme_threadx.txt
+++ b/ports/cortex_a15/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A15
+ Microsoft's Azure RTOS ThreadX for Cortex-A15
Using the AC6 Tools
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -22,44 +22,44 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
VE_Cortex-A15 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-a15_tx.launch' file, click
'Debug As', and then click 'cortex-a15_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A15 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A15 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -77,52 +77,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A15
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A15 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -130,7 +130,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -143,7 +143,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -153,12 +153,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -175,22 +175,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -198,10 +198,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -214,12 +214,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -228,7 +228,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -256,18 +256,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -283,7 +283,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -299,12 +299,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -312,7 +312,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a15/ac6/src/tx_thread_context_restore.S b/ports/cortex_a15/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a15/ac6/src/tx_thread_context_save.S b/ports/cortex_a15/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a15/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a15/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a15/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a15/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a15/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a15/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a15/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_schedule.S b/ports/cortex_a15/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a15/ac6/src/tx_thread_stack_build.S b/ports/cortex_a15/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_system_return.S b/ports/cortex_a15/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a15/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a15/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a15/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a15/ac6/src/tx_timer_interrupt.S b/ports/cortex_a15/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a15/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a15/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/example_build/reset.S b/ports/cortex_a15/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a15/gnu/example_build/reset.S
+++ b/ports/cortex_a15/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a15/gnu/example_build/sample_threadx.ld b/ports/cortex_a15/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a15/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a15/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a15/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a15/gnu/example_build/tx_initialize_low_level.S
index 88777dfd4..f9a572165 100644
--- a/ports/cortex_a15/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a15/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -95,17 +96,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a15/gnu/example_build/v7.h b/ports/cortex_a15/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a15/gnu/example_build/v7.h
+++ b/ports/cortex_a15/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a15/gnu/example_build/v7.s b/ports/cortex_a15/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a15/gnu/example_build/v7.s
+++ b/ports/cortex_a15/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a15/gnu/inc/tx_port.h b/ports/cortex_a15/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a15/gnu/inc/tx_port.h
+++ b/ports/cortex_a15/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a15/gnu/readme_threadx.txt b/ports/cortex_a15/gnu/readme_threadx.txt
index 5bd5eb7cf..80a0cf6a6 100644
--- a/ports/cortex_a15/gnu/readme_threadx.txt
+++ b/ports/cortex_a15/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A15
+ Microsoft's Azure RTOS ThreadX for Cortex-A15
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-A15 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-A15 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A15
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A15 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -483,7 +483,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a15/gnu/src/tx_thread_context_restore.S b/ports/cortex_a15/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a15/gnu/src/tx_thread_context_save.S b/ports/cortex_a15/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a15/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a15/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a15/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a15/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a15/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a15/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a15/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_schedule.S b/ports/cortex_a15/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a15/gnu/src/tx_thread_stack_build.S b/ports/cortex_a15/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_system_return.S b/ports/cortex_a15/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a15/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a15/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a15/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a15/gnu/src/tx_timer_interrupt.S b/ports/cortex_a15/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a15/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a15/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a15/iar/example_build/cstartup.s b/ports/cortex_a15/iar/example_build/cstartup.s
index 647de2e8e..b4ed8f87f 100644
--- a/ports/cortex_a15/iar/example_build/cstartup.s
+++ b/ports/cortex_a15/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/cortex_a15/iar/example_build/sample_threadx.c b/ports/cortex_a15/iar/example_build/sample_threadx.c
index c7c300cb1..afbd4ea81 100644
--- a/ports/cortex_a15/iar/example_build/sample_threadx.c
+++ b/ports/cortex_a15/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a15/iar/example_build/tx_initialize_low_level.s b/ports/cortex_a15/iar/example_build/tx_initialize_low_level.s
index 6b32af58d..13bb51f0a 100644
--- a/ports/cortex_a15/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a15/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -52,7 +52,7 @@ SYS_STACK_SIZE DEFINE 1024 ; System stack size
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -65,45 +65,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -136,7 +130,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -187,17 +181,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -211,7 +205,7 @@ __tx_irq_processing_return
;
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -227,28 +221,28 @@ __tx_irq_processing_return
;__tx_example_vectored_irq_handler:
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -257,7 +251,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -281,11 +275,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a15/iar/inc/tx_port.h b/ports/cortex_a15/iar/inc/tx_port.h
index 719f0e721..ca868f642 100644
--- a/ports/cortex_a15/iar/inc/tx_port.h
+++ b/ports/cortex_a15/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A15/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A15/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -189,7 +181,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -203,18 +195,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -228,11 +220,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -242,23 +234,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -286,8 +278,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -298,22 +290,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -383,8 +375,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A15/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A15/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_a15/iar/readme_threadx.txt b/ports/cortex_a15/iar/readme_threadx.txt
index 151c52533..e087351fd 100644
--- a/ports/cortex_a15/iar/readme_threadx.txt
+++ b/ports/cortex_a15/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A15
+ Microsoft's Azure RTOS ThreadX for Cortex-A15
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-A15 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-A15 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-A15 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-A15 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,146 +92,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -245,29 +245,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A15
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A15 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -278,12 +278,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -291,7 +291,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -304,7 +304,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -315,12 +315,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,24 +337,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -362,15 +362,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -378,7 +378,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -389,12 +389,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A15 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A15 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -403,7 +403,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -434,18 +434,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -463,7 +463,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -479,22 +479,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-A15 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A15 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A15 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -506,14 +506,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a15/iar/src/tx_iar.c b/ports/cortex_a15/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_a15/iar/src/tx_iar.c
+++ b/ports/cortex_a15/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_a15/iar/src/tx_thread_context_restore.s b/ports/cortex_a15/iar/src/tx_thread_context_restore.s
index 64584101a..d88b3e389 100644
--- a/ports/cortex_a15/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_a15/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -47,47 +47,38 @@ IRQ_MODE DEFINE 0x92 ; Disable IRQ, IRQ mode
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -119,13 +110,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state variable
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_a15/iar/src/tx_thread_context_save.s b/ports/cortex_a15/iar/src/tx_thread_context_save.s
index 09d941758..799cf55bd 100644
--- a/ports/cortex_a15/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_a15/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,46 +37,37 @@
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -93,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
#endif
@@ -111,7 +102,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -127,7 +118,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -141,13 +132,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -167,7 +158,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -177,7 +168,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -192,7 +183,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a15/iar/src/tx_thread_fiq_context_restore.s b/ports/cortex_a15/iar/src/tx_thread_fiq_context_restore.s
index bbbf8cf1d..38259b01b 100644
--- a/ports/cortex_a15/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a15/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE DEFINE 0xD3 ; SVC mode
FIQ_MODE DEFINE 0xD1 ; FIQ mode
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
@@ -48,47 +48,38 @@ IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -116,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state variable
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -223,7 +214,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a15/iar/src/tx_thread_fiq_context_save.s b/ports/cortex_a15/iar/src/tx_thread_fiq_context_save.s
index b8828834c..8e205668a 100644
--- a/ports/cortex_a15/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a15/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state variable
LDR r2, [r3, #0] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -107,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -123,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3, #0] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -167,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -187,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
END
diff --git a/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_end.s
index f8a73cbc7..272bb7455 100644
--- a/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ/FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -96,7 +90,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_start.s
index 497d7421c..afa1ae059 100644
--- a/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a15/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a15/iar/src/tx_thread_interrupt_control.s b/ports/cortex_a15/iar/src/tx_thread_interrupt_control.s
index ce9d08a79..c7432fcb5 100644
--- a/ports/cortex_a15/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a15/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -30,42 +30,36 @@
INT_MASK = 0x03F
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a15/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_a15/iar/src/tx_thread_interrupt_disable.s
index 19c70c894..97b13aab1 100644
--- a/ports/cortex_a15/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a15/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -27,41 +27,35 @@
;#include "tx_api.h"
;#include "tx_thread.h"
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
#else
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
#endif
#ifdef TX_THUMB
diff --git a/ports/cortex_a15/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_a15/iar/src/tx_thread_interrupt_restore.s
index 70c949b3d..b27654835 100644
--- a/ports/cortex_a15/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a15/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -27,42 +27,36 @@
;#include "tx_api.h"
;#include "tx_thread.h"
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a15/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_a15/iar/src/tx_thread_irq_nesting_end.s
index f1662abaa..33c018f4d 100644
--- a/ports/cortex_a15/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a15/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ/FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -96,7 +90,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a15/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_a15/iar/src/tx_thread_irq_nesting_start.s
index 21151129b..0cc033566 100644
--- a/ports/cortex_a15/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a15/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a15/iar/src/tx_thread_schedule.s b/ports/cortex_a15/iar/src/tx_thread_schedule.s
index c98087aab..2a36cc425 100644
--- a/ports/cortex_a15/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_a15/iar/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +36,39 @@
EXTERN _tx_timer_time_slice
EXTERN _tx_execution_thread_enter
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +99,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +112,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +126,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time-slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -239,3 +231,4 @@ __tx_no_thread_to_disable
END
+
diff --git a/ports/cortex_a15/iar/src/tx_thread_stack_build.s b/ports/cortex_a15/iar/src/tx_thread_stack_build.s
index 141a49bd9..bfde03407 100644
--- a/ports/cortex_a15/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_a15/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,44 +38,38 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ interrupts ena
EXTERN _tx_thread_schedule
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -85,10 +79,10 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ interrupts ena
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A15 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a15/iar/src/tx_thread_system_return.s b/ports/cortex_a15/iar/src/tx_thread_system_return.s
index 3a1d2ba61..bd58b76c1 100644
--- a/ports/cortex_a15/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_a15/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,47 +36,38 @@
EXTERN _tx_execution_thread_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -92,7 +83,7 @@ _tx_thread_system_return
LDR r4, =_tx_thread_current_ptr ; Pickup address of current ptr
LDR r5, [r4, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r1, [r5, #144] ; Pickup the VFP enabled flag
CMP r1, #0 ; Is the VFP enabled?
@@ -107,7 +98,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -115,7 +106,7 @@ _tx_skip_solicited_vfp_save
#else
CPSID i ; Disable IRQ interrupts
#endif
-
+
#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
diff --git a/ports/cortex_a15/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_a15/iar/src/tx_thread_vectored_context_save.s
index 8d05bd80d..67ffb6cd7 100644
--- a/ports/cortex_a15/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a15/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A15/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -134,7 +125,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -166,7 +157,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a15/iar/src/tx_timer_interrupt.s b/ports/cortex_a15/iar/src/tx_timer_interrupt.s
index 9a37d02a1..b013cadd2 100644
--- a/ports/cortex_a15/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_a15/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
EXTERN _tx_thread_time_slice
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A15/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A15/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,7 +220,7 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup address of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
diff --git a/ports/cortex_a17/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a17/ac6/example_build/sample_threadx/.cproject
index 6eef9a7b1..80b9670c5 100644
--- a/ports/cortex_a17/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a17/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a17/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a17/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a17/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a17/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a17/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a17/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a17/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a17/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a17/ac6/example_build/tx/.cproject b/ports/cortex_a17/ac6/example_build/tx/.cproject
index 93fc29314..89a6951a9 100644
--- a/ports/cortex_a17/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a17/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a17/ac6/inc/tx_port.h b/ports/cortex_a17/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a17/ac6/inc/tx_port.h
+++ b/ports/cortex_a17/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a17/ac6/src/tx_thread_context_restore.S b/ports/cortex_a17/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a17/ac6/src/tx_thread_context_save.S b/ports/cortex_a17/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a17/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a17/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a17/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a17/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a17/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a17/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a17/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_schedule.S b/ports/cortex_a17/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a17/ac6/src/tx_thread_stack_build.S b/ports/cortex_a17/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_system_return.S b/ports/cortex_a17/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a17/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a17/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a17/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a17/ac6/src/tx_timer_interrupt.S b/ports/cortex_a17/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a17/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a17/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/example_build/reset.S b/ports/cortex_a17/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a17/gnu/example_build/reset.S
+++ b/ports/cortex_a17/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a17/gnu/example_build/sample_threadx.ld b/ports/cortex_a17/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a17/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a17/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a17/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a17/gnu/example_build/tx_initialize_low_level.S
index 88777dfd4..f9a572165 100644
--- a/ports/cortex_a17/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a17/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -95,17 +96,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a17/gnu/example_build/v7.h b/ports/cortex_a17/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a17/gnu/example_build/v7.h
+++ b/ports/cortex_a17/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a17/gnu/example_build/v7.s b/ports/cortex_a17/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a17/gnu/example_build/v7.s
+++ b/ports/cortex_a17/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a17/gnu/inc/tx_port.h b/ports/cortex_a17/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a17/gnu/inc/tx_port.h
+++ b/ports/cortex_a17/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a17/gnu/src/tx_thread_context_restore.S b/ports/cortex_a17/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a17/gnu/src/tx_thread_context_save.S b/ports/cortex_a17/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a17/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a17/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a17/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a17/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a17/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a17/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a17/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_schedule.S b/ports/cortex_a17/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a17/gnu/src/tx_thread_stack_build.S b/ports/cortex_a17/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_system_return.S b/ports/cortex_a17/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a17/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a17/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a17/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a17/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a17/gnu/src/tx_timer_interrupt.S b/ports/cortex_a17/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a17/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a17/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a34/ac6/example_build/sample_threadx/.cproject
index 587034cd3..7310f92fb 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3.h b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3.h
index 23bc7fd8f..dfe37586e 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef GICV3_h
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicc.h b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicc.h
index 8e6f0accf..beaa9157b 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicc.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicc.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef GICV3_gicc_h
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicd.c b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicd.c
index 3bfb4a935..2cf1553b8 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicd.c
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicd.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#include
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicr.c b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicr.c
index 7b437b18b..912ab2e40 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicr.c
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/GICv3_gicr.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2019 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#include "GICv3.h"
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.S
index e7f95aa76..e8a87f0b3 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -4,7 +4,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/PPM_AEM.h b/ports/cortex_a34/ac6/example_build/sample_threadx/PPM_AEM.h
index 52c9a0fee..f7501eeb4 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/PPM_AEM.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/PPM_AEM.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a34/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.c b/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.c
index 4dc009b2a..c2ce6faa0 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.c
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.c
@@ -3,7 +3,7 @@
//
// Copyright (c) 2009-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.h b/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.h
index 777062cc8..4d4239042 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/sp804_timer.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2009-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/startup.S b/ports/cortex_a34/ac6/example_build/sample_threadx/startup.S
index de100e566..9f0fc2114 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/startup.S
@@ -7,7 +7,7 @@
//
// Copyright (c) 2014-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.S b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.S
index f8db3bfe1..45445a983 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.S
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_mmu.h
index ee8834faa..d0c516013 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_mmu.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_system.h b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_system.h
index ff96deffa..a62d2a331 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_system.h
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_system.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_utils.S b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_utils.S
index f0fcef267..888892a06 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/v8_utils.S
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/v8_utils.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2013-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/ac6/example_build/sample_threadx/vectors.S b/ports/cortex_a34/ac6/example_build/sample_threadx/vectors.S
index 9e60e001e..7784f98e7 100644
--- a/ports/cortex_a34/ac6/example_build/sample_threadx/vectors.S
+++ b/ports/cortex_a34/ac6/example_build/sample_threadx/vectors.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2014-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/ac6/example_build/tx/.cproject b/ports/cortex_a34/ac6/example_build/tx/.cproject
index 21675fd6d..a7e803217 100644
--- a/ports/cortex_a34/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a34/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a34/ac6/inc/tx_port.h b/ports/cortex_a34/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a34/ac6/inc/tx_port.h
+++ b/ports/cortex_a34/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a34/ac6/src/tx_initialize_low_level.S b/ports/cortex_a34/ac6/src/tx_initialize_low_level.S
index da9e94679..55bcfaa89 100644
--- a/ports/cortex_a34/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a34/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,12 +56,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_context_restore.S b/ports/cortex_a34/ac6/src/tx_thread_context_restore.S
index e5357e5cf..3870de0d4 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,12 +56,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_context_save.S b/ports/cortex_a34/ac6/src/tx_thread_context_save.S
index d292cce70..8bc7e21b4 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,12 +55,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a34/ac6/src/tx_thread_fp_disable.c
index cccf96c89..c69f6de52 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a34/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a34/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a34/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a34/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a34/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a34/ac6/src/tx_thread_interrupt_control.S
index efc107248..d42351805 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a34/ac6/src/tx_thread_interrupt_disable.S
index 508562ff3..08f0e7e1b 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,14 +53,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a34/ac6/src/tx_thread_interrupt_restore.S
index 3572c1a2d..69a859da9 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_schedule.S b/ports/cortex_a34/ac6/src/tx_thread_schedule.S
index 4612d4b53..4d3763eba 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -225,3 +217,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a34/ac6/src/tx_thread_stack_build.S b/ports/cortex_a34/ac6/src/tx_thread_stack_build.S
index 9cd954f59..d1002b2c5 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a34/ac6/src/tx_thread_system_return.S b/ports/cortex_a34/ac6/src/tx_thread_system_return.S
index 0ec7cdb58..112e1454b 100644
--- a/ports/cortex_a34/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a34/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,12 +56,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a34/ac6/src/tx_timer_interrupt.S b/ports/cortex_a34/ac6/src/tx_timer_interrupt.S
index 92bdef3d2..ac61450b4 100644
--- a/ports/cortex_a34/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a34/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,12 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a34/gnu/example_build/sample_threadx/.cproject
index d801e51a3..eae50159a 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/.cproject
@@ -1,242 +1,242 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3.h b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3.h
index 23bc7fd8f..dfe37586e 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef GICV3_h
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_aliases.h b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_aliases.h
index 0928d14c8..826ba973e 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_aliases.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_aliases.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2016-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicc.h b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicc.h
index 2b8a2d3ef..998d92b59 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicc.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicc.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef GICV3_gicc_h
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicd.c b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicd.c
index 2cf9e8437..464ecced1 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicd.c
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicd.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#include
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicr.c b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicr.c
index b0d22c400..61addaef4 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicr.c
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/GICv3_gicr.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014-2019 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#include "GICv3.h"
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.S
index e7f95aa76..e8a87f0b3 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -4,7 +4,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/PPM_AEM.h b/ports/cortex_a34/gnu/example_build/sample_threadx/PPM_AEM.h
index 52c9a0fee..f7501eeb4 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/PPM_AEM.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/PPM_AEM.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a34/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.c b/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.c
index 4dc009b2a..c2ce6faa0 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.c
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.c
@@ -3,7 +3,7 @@
//
// Copyright (c) 2009-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.h b/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.h
index 777062cc8..4d4239042 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/sp804_timer.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2009-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a34/gnu/example_build/sample_threadx/startup.S
index 67dd8a6a3..b44806feb 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/startup.S
@@ -7,7 +7,7 @@
//
// Copyright (c) 2014-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.S b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.S
index f8db3bfe1..45445a983 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.S
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_mmu.h
index ee8834faa..d0c516013 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_mmu.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2019 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_system.h b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_system.h
index ff96deffa..a62d2a331 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_system.h
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_system.h
@@ -3,7 +3,7 @@
//
// Copyright (c) 2012-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_utils.S b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_utils.S
index f0fcef267..888892a06 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/v8_utils.S
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/v8_utils.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2013-2017 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
diff --git a/ports/cortex_a34/gnu/example_build/sample_threadx/vectors.S b/ports/cortex_a34/gnu/example_build/sample_threadx/vectors.S
index 9e60e001e..7784f98e7 100644
--- a/ports/cortex_a34/gnu/example_build/sample_threadx/vectors.S
+++ b/ports/cortex_a34/gnu/example_build/sample_threadx/vectors.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2014-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a34/gnu/example_build/tx/.cproject b/ports/cortex_a34/gnu/example_build/tx/.cproject
index e5ff05f48..4d9d34ca9 100644
--- a/ports/cortex_a34/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a34/gnu/example_build/tx/.cproject
@@ -1,234 +1,234 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a34/gnu/inc/tx_port.h b/ports/cortex_a34/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a34/gnu/inc/tx_port.h
+++ b/ports/cortex_a34/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a34/gnu/src/tx_initialize_low_level.S b/ports/cortex_a34/gnu/src/tx_initialize_low_level.S
index 9ee098abb..aa3f04cd7 100644
--- a/ports/cortex_a34/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a34/gnu/src/tx_initialize_low_level.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Initialize */
/** */
@@ -58,15 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -96,4 +88,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a34/gnu/src/tx_thread_context_restore.S b/ports/cortex_a34/gnu/src/tx_thread_context_restore.S
index 0830026d6..54ebca655 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_context_save.S b/ports/cortex_a34/gnu/src/tx_thread_context_save.S
index 3a533f622..ae4160791 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a34/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a34/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a34/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a34/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a34/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a34/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a34/gnu/src/tx_thread_interrupt_control.S
index 14cc0cbd4..465e7bb10 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,17 +57,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a34/gnu/src/tx_thread_interrupt_disable.S
index f88bc8342..f2d304357 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a34/gnu/src/tx_thread_interrupt_restore.S
index 51f3b00f5..9f7034569 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,17 +57,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_schedule.S b/ports/cortex_a34/gnu/src/tx_thread_schedule.S
index 8b1bbee2e..3d9d215c9 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,18 +60,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -231,3 +220,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a34/gnu/src/tx_thread_stack_build.S b/ports/cortex_a34/gnu/src/tx_thread_stack_build.S
index c4ffd3f8c..116a2a3c9 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a34/gnu/src/tx_thread_system_return.S b/ports/cortex_a34/gnu/src/tx_thread_system_return.S
index 2fee3c650..0db113d54 100644
--- a/ports/cortex_a34/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a34/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,15 +59,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a34/gnu/src/tx_timer_interrupt.S b/ports/cortex_a34/gnu/src/tx_timer_interrupt.S
index 70bf5d3a0..2e6c8f8f7 100644
--- a/ports/cortex_a34/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a34/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,15 +61,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 03-08-2023 Cindy Deng Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a35/ac6/example_build/sample_threadx/.cproject
index 42240200b..7e53b3fdb 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a35/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a35/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a35/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a35/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a35/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a35/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a35/ac6/example_build/tx/.cproject b/ports/cortex_a35/ac6/example_build/tx/.cproject
index 3be714ea0..e0d1dda5e 100644
--- a/ports/cortex_a35/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a35/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a35/ac6/inc/tx_port.h b/ports/cortex_a35/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a35/ac6/inc/tx_port.h
+++ b/ports/cortex_a35/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a35/ac6/readme_threadx.txt b/ports/cortex_a35/ac6/readme_threadx.txt
index fafe435c4..3abb7d8e8 100644
--- a/ports/cortex_a35/ac6/readme_threadx.txt
+++ b/ports/cortex_a35/ac6/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A35
+ Microsoft's Azure RTOS ThreadX for Cortex-A35
Using the ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX SMP demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX SMP demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the Eclipse project file
-"tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply select the Eclipse project file
+"tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -32,29 +32,29 @@ the ThreadX SMP demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A35 using AC6 tools is at label
-start64. This is defined within the AC6 compiler's startup code. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A35 using AC6 tools is at label
+start64. This is defined within the AC6 compiler's startup code. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for determining the
-first available RAM address for use by the application, which is supplied as the
+The ThreadX tx_initialize_low_level.s file is responsible for determining the
+first available RAM address for use by the application, which is supplied as the
sole input parameter to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The 64-bit AC6 compiler assumes that registers x0-x18 are scratch registers
-for each function. All other registers used by a C function must be preserved
-by the function. ThreadX takes advantage of this in situations where a context
-switch happens as a result of making a ThreadX service call (which is itself a
-C function). In such cases, the saved context of a thread is only the
+The 64-bit AC6 compiler assumes that registers x0-x18 are scratch registers
+for each function. All other registers used by a C function must be preserved
+by the function. ThreadX takes advantage of this in situations where a context
+switch happens as a result of making a ThreadX service call (which is itself a
+C function). In such cases, the saved context of a thread is only the
non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -73,10 +73,10 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x040 x22 x21
0x048 x23 x22
0x050 x20 x19
- 0x058 x21 x20
- 0x060 x18 x29
- 0x068 x19 x30
- 0x070 x16
+ 0x058 x21 x20
+ 0x060 x18 x29
+ 0x068 x19 x30
+ 0x070 x16
0x078 x17
0x080 x14
0x088 x15
@@ -95,7 +95,7 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x0F0 x0
0x0F8 x1
0x100 x29
- 0x108 x30
+ 0x108 x30
FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
@@ -144,19 +144,19 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x1F0 q3
0x200 q0
0x210 q1
- 0x220 x28
- 0x228 reserved
- 0x230 x26
- 0x238 x27
- 0x240 x24
- 0x248 x25
- 0x250 x22
- 0x258 x23
- 0x260 x20
- 0x268 x21
- 0x270 x18
- 0x278 x19
- 0x280 x16
+ 0x220 x28
+ 0x228 reserved
+ 0x230 x26
+ 0x238 x27
+ 0x240 x24
+ 0x248 x25
+ 0x250 x22
+ 0x258 x23
+ 0x260 x20
+ 0x268 x21
+ 0x270 x18
+ 0x278 x19
+ 0x280 x16
0x288 x17
0x290 x14
0x298 x15
@@ -175,20 +175,20 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x300 x0
0x308 x1
0x310 x29
- 0x318 x30
+ 0x318 x30
6. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
you can change the project settings to the desired compiler optimization level.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
@@ -208,22 +208,22 @@ irq_handler:
B _tx_thread_context_restore
-By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
+By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
and EL2 can be done by simply building the ThreadX library with either EL1 or EL2 defined.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
-timeouts, and application timers. Without such a timer interrupt source, these services
-are not functional. However, all other ThreadX services are operational without a
+ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
+timeouts, and application timers. Without such a timer interrupt source, these services
+are not functional. However, all other ThreadX services are operational without a
periodic timer source.
9. ARM FP Support
By default, FP support is disabled for each thread. If saving the context of the FP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the FP usage:
void tx_thread_fp_enable(void);
diff --git a/ports/cortex_a35/ac6/src/tx_initialize_low_level.S b/ports/cortex_a35/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a35/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a35/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_context_restore.S b/ports/cortex_a35/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_context_save.S b/ports/cortex_a35/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a35/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a35/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a35/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a35/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a35/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a35/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a35/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a35/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a35/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_schedule.S b/ports/cortex_a35/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a35/ac6/src/tx_thread_stack_build.S b/ports/cortex_a35/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a35/ac6/src/tx_thread_system_return.S b/ports/cortex_a35/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a35/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a35/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a35/ac6/src/tx_timer_interrupt.S b/ports/cortex_a35/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a35/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a35/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a35/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a35/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a35/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a35/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a35/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a35/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a35/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a35/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a35/gnu/example_build/tx/.cproject b/ports/cortex_a35/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a35/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a35/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a35/gnu/inc/tx_port.h b/ports/cortex_a35/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a35/gnu/inc/tx_port.h
+++ b/ports/cortex_a35/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a35/gnu/readme_threadx.txt b/ports/cortex_a35/gnu/readme_threadx.txt
index bab64522a..17895ee5a 100644
--- a/ports/cortex_a35/gnu/readme_threadx.txt
+++ b/ports/cortex_a35/gnu/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A35
+ Microsoft's Azure RTOS ThreadX for Cortex-A35
Using the ARM GNU Compiler & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX SMP demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX SMP demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the Eclipse project file
-"tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply select the Eclipse project file
+"tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -32,29 +32,29 @@ the ThreadX SMP demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A35 using GCC tools is at label
-"start64". This is defined within the GCC compiler's startup code. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A35 using GCC tools is at label
+"start64". This is defined within the GCC compiler's startup code. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for determining the
-first available RAM address for use by the application, which is supplied as the
+The ThreadX tx_initialize_low_level.s file is responsible for determining the
+first available RAM address for use by the application, which is supplied as the
sole input parameter to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The 64-bit GCC compiler assumes that registers x0-x18 are scratch registers
-for each function. All other registers used by a C function must be preserved
-by the function. ThreadX takes advantage of this in situations where a context
-switch happens as a result of making a ThreadX service call (which is itself a
-C function). In such cases, the saved context of a thread is only the
+The 64-bit GCC compiler assumes that registers x0-x18 are scratch registers
+for each function. All other registers used by a C function must be preserved
+by the function. ThreadX takes advantage of this in situations where a context
+switch happens as a result of making a ThreadX service call (which is itself a
+C function). In such cases, the saved context of a thread is only the
non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -73,10 +73,10 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x040 x22 x21
0x048 x23 x22
0x050 x20 x19
- 0x058 x21 x20
- 0x060 x18 x29
- 0x068 x19 x30
- 0x070 x16
+ 0x058 x21 x20
+ 0x060 x18 x29
+ 0x068 x19 x30
+ 0x070 x16
0x078 x17
0x080 x14
0x088 x15
@@ -95,7 +95,7 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x0F0 x0
0x0F8 x1
0x100 x29
- 0x108 x30
+ 0x108 x30
FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
@@ -144,19 +144,19 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x1F0 q3
0x200 q0
0x210 q1
- 0x220 x28
- 0x228 reserved
- 0x230 x26
- 0x238 x27
- 0x240 x24
- 0x248 x25
- 0x250 x22
- 0x258 x23
- 0x260 x20
- 0x268 x21
- 0x270 x18
- 0x278 x19
- 0x280 x16
+ 0x220 x28
+ 0x228 reserved
+ 0x230 x26
+ 0x238 x27
+ 0x240 x24
+ 0x248 x25
+ 0x250 x22
+ 0x258 x23
+ 0x260 x20
+ 0x268 x21
+ 0x270 x18
+ 0x278 x19
+ 0x280 x16
0x288 x17
0x290 x14
0x298 x15
@@ -175,20 +175,20 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x300 x0
0x308 x1
0x310 x29
- 0x318 x30
+ 0x318 x30
6. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
you can change the project settings to the desired compiler optimization level.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
@@ -208,22 +208,22 @@ irq_handler:
B _tx_thread_context_restore
-By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
+By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
and EL2 can be done by simply building the ThreadX library with either EL1 or EL2 defined.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
-timeouts, and application timers. Without such a timer interrupt source, these services
-are not functional. However, all other ThreadX services are operational without a
+ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
+timeouts, and application timers. Without such a timer interrupt source, these services
+are not functional. However, all other ThreadX services are operational without a
periodic timer source.
9. ARM FP Support
By default, FP support is disabled for each thread. If saving the context of the FP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the FP usage:
void tx_thread_fp_enable(void);
diff --git a/ports/cortex_a35/gnu/src/tx_initialize_low_level.S b/ports/cortex_a35/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a35/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a35/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a35/gnu/src/tx_thread_context_restore.S b/ports/cortex_a35/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_context_save.S b/ports/cortex_a35/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a35/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a35/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a35/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a35/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a35/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a35/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a35/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a35/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a35/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_schedule.S b/ports/cortex_a35/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a35/gnu/src/tx_thread_stack_build.S b/ports/cortex_a35/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a35/gnu/src/tx_thread_system_return.S b/ports/cortex_a35/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a35/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a35/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a35/gnu/src/tx_timer_interrupt.S b/ports/cortex_a35/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a35/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a35/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a5/ac5/example_build/sample_threadx.c b/ports/cortex_a5/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_a5/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_a5/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a5/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_a5/ac5/example_build/tx_initialize_low_level.s
index af7e965c0..5808714c8 100644
--- a/ports/cortex_a5/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a5/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -90,45 +90,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -179,7 +173,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -201,7 +195,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -253,7 +247,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -261,21 +255,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -285,7 +279,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -301,28 +295,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -331,7 +325,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -353,11 +347,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a5/ac5/inc/tx_port.h b/ports/cortex_a5/ac5/inc/tx_port.h
index 5f028f6cd..3c046e95e 100644
--- a/ports/cortex_a5/ac5/inc/tx_port.h
+++ b/ports/cortex_a5/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A5/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A5/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
-
+
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -325,8 +317,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A5/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A5/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a5/ac5/readme_threadx.txt b/ports/cortex_a5/ac5/readme_threadx.txt
index 12962be2a..35e50220b 100644
--- a/ports/cortex_a5/ac5/readme_threadx.txt
+++ b/ports/cortex_a5/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A5
+ Microsoft's Azure RTOS ThreadX for Cortex-A5
Thumb & 32-bit Mode
@@ -6,21 +6,21 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -29,45 +29,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-A5 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-A5 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -83,10 +83,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -97,161 +97,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -269,39 +269,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A5 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -312,12 +312,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -325,7 +325,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -338,7 +338,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -348,12 +348,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -370,22 +370,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -393,10 +393,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -409,12 +409,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -423,7 +423,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -451,18 +451,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -478,7 +478,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -494,28 +494,28 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-A5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a5/ac5/src/tx_thread_context_restore.s b/ports/cortex_a5/ac5/src/tx_thread_context_restore.s
index 35652d4fe..6c3632e14 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_a5/ac5/src/tx_thread_context_save.s b/ports/cortex_a5/ac5/src/tx_thread_context_save.s
index 20630974c..df4e96a84 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -109,7 +103,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -125,7 +119,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -139,13 +133,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -165,7 +159,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -175,7 +169,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -190,7 +184,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a5/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_a5/ac5/src/tx_thread_fiq_context_restore.s
index fd513c2cc..fd0cb5872 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -164,7 +158,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -209,7 +203,7 @@ _tx_skip_fiq_vfp_save
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -221,7 +215,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a5/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_a5/ac5/src/tx_thread_fiq_context_save.s
index e45574f38..21e920ae1 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_end.s
index d5d9f51ad..4e6699a7f 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_start.s
index b12d14da4..91a3164f9 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a5/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_a5/ac5/src/tx_thread_interrupt_control.s
index c8056c390..ded469188 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a5/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_a5/ac5/src/tx_thread_interrupt_disable.s
index 8a59297cf..8c922f009 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_a5/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_a5/ac5/src/tx_thread_interrupt_restore.s
index aa83ad278..ef515f0e0 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_end.s
index ae508e4af..be0bb7a5e 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_start.s
index c326590be..b2f554a7c 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a5/ac5/src/tx_thread_schedule.s b/ports/cortex_a5/ac5/src/tx_thread_schedule.s
index 4ff4083c4..025a69661 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +41,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +102,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -233,3 +228,4 @@ __tx_no_thread_to_disable
END
+
diff --git a/ports/cortex_a5/ac5/src/tx_thread_stack_build.s b/ports/cortex_a5/ac5/src/tx_thread_stack_build.s
index b006a9436..cfba76346 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A5 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a5/ac5/src/tx_thread_system_return.s b/ports/cortex_a5/ac5/src/tx_thread_system_return.s
index 26925f8a9..afca3f692 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -104,7 +98,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
IF :DEF:TX_ENABLE_FIQ_SUPPORT
diff --git a/ports/cortex_a5/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_a5/ac5/src/tx_thread_vectored_context_save.s
index 53b988a03..a902142c0 100644
--- a/ports/cortex_a5/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a5/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a5/ac5/src/tx_timer_interrupt.s b/ports/cortex_a5/ac5/src/tx_timer_interrupt.s
index 052b590d3..975911e41 100644
--- a/ports/cortex_a5/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_a5/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a5/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a5/ac6/example_build/sample_threadx/.cproject
index 27463deb1..86a4d2d6f 100644
--- a/ports/cortex_a5/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a5/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a5/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a5/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a5/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a5/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a5/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a5/ac6/example_build/tx/.cproject b/ports/cortex_a5/ac6/example_build/tx/.cproject
index 22e5a64ca..f50b881eb 100644
--- a/ports/cortex_a5/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a5/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a5/ac6/inc/tx_port.h b/ports/cortex_a5/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a5/ac6/inc/tx_port.h
+++ b/ports/cortex_a5/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a5/ac6/src/tx_thread_context_restore.S b/ports/cortex_a5/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a5/ac6/src/tx_thread_context_save.S b/ports/cortex_a5/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a5/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a5/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a5/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a5/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a5/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a5/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a5/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_schedule.S b/ports/cortex_a5/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a5/ac6/src/tx_thread_stack_build.S b/ports/cortex_a5/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_system_return.S b/ports/cortex_a5/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a5/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a5/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a5/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a5/ac6/src/tx_timer_interrupt.S b/ports/cortex_a5/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a5/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a5/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_a5/ghs/example_build/tx_initialize_low_level.arm
index 1c7b035e7..fe924b619 100644
--- a/ports/cortex_a5/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_a5/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/inc/tx_el.h b/ports/cortex_a5/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_a5/ghs/inc/tx_el.h
+++ b/ports/cortex_a5/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_a5/ghs/inc/tx_port.h b/ports/cortex_a5/ghs/inc/tx_port.h
index c93e234c6..e9e0b876d 100644
--- a/ports/cortex_a5/ghs/inc/tx_port.h
+++ b/ports/cortex_a5/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A5/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A5/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a5/ghs/readme_threadx.txt b/ports/cortex_a5/ghs/readme_threadx.txt
index 28e59b781..154ffc25e 100644
--- a/ports/cortex_a5/ghs/readme_threadx.txt
+++ b/ports/cortex_a5/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A5
+ Microsoft's Azure RTOS ThreadX for Cortex-A5
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-A5 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-A5 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-A5 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-A5 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-A5 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-A5 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-A5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -520,7 +520,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-A5/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-A5/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_a5/ghs/src/tx_el.c b/ports/cortex_a5/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_a5/ghs/src/tx_el.c
+++ b/ports/cortex_a5/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_a5/ghs/src/tx_thread_context_restore.arm b/ports/cortex_a5/ghs/src/tx_thread_context_restore.arm
index 52c099c6f..4cd43b305 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_context_save.arm b/ports/cortex_a5/ghs/src/tx_thread_context_save.arm
index 48bc08e22..813984e1b 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_a5/ghs/src/tx_thread_fiq_context_restore.arm
index 836990e90..e0ea4280f 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_a5/ghs/src/tx_thread_fiq_context_save.arm
index 39ac2d37a..5d43d442c 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_end.arm
index 5ddfe98ce..28a329dd9 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_start.arm
index 6787d19a8..936dfad6d 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_a5/ghs/src/tx_thread_interrupt_control.arm
index 9b3c9b19d..65810603b 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_a5/ghs/src/tx_thread_interrupt_disable.arm
index 2bb6d1dcc..5e1f9b952 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_a5/ghs/src/tx_thread_interrupt_restore.arm
index 1185de93b..135add2d6 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_end.arm
index 09c292763..6796d6e55 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_start.arm
index d9e69e257..e75175e8f 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_schedule.arm b/ports/cortex_a5/ghs/src/tx_thread_schedule.arm
index 69ac79335..128491d0d 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_stack_build.arm b/ports/cortex_a5/ghs/src/tx_thread_stack_build.arm
index 19dd2b47e..c3681c87c 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_system_return.arm b/ports/cortex_a5/ghs/src/tx_thread_system_return.arm
index 4d7cc93d6..4e7a0f60c 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_a5/ghs/src/tx_thread_vectored_context_save.arm
index 7056e4415..f3d2ef201 100644
--- a/ports/cortex_a5/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_a5/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/ghs/src/tx_timer_interrupt.arm b/ports/cortex_a5/ghs/src/tx_timer_interrupt.arm
index c85530c82..7592019ff 100644
--- a/ports/cortex_a5/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_a5/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/gnu/example_build/MP_GIC.S b/ports/cortex_a5/gnu/example_build/MP_GIC.S
index 2ff179fbd..a3274f217 100644
--- a/ports/cortex_a5/gnu/example_build/MP_GIC.S
+++ b/ports/cortex_a5/gnu/example_build/MP_GIC.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a5/gnu/example_build/MP_GIC.h b/ports/cortex_a5/gnu/example_build/MP_GIC.h
index 1d0476112..42a96c3db 100644
--- a/ports/cortex_a5/gnu/example_build/MP_GIC.h
+++ b/ports/cortex_a5/gnu/example_build/MP_GIC.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a5/gnu/example_build/MP_PrivateTimer.S b/ports/cortex_a5/gnu/example_build/MP_PrivateTimer.S
index 2077d9177..58e5afd4c 100644
--- a/ports/cortex_a5/gnu/example_build/MP_PrivateTimer.S
+++ b/ports/cortex_a5/gnu/example_build/MP_PrivateTimer.S
@@ -93,7 +93,7 @@ get_private_timer_count:
LDR r0, [r0, #0x604] // Read count register
BX lr
-
+
// ------------------------------------------------------------
// void clear_private_timer_irq(void)
diff --git a/ports/cortex_a5/gnu/example_build/reset.S b/ports/cortex_a5/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a5/gnu/example_build/reset.S
+++ b/ports/cortex_a5/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a5/gnu/example_build/sample_threadx.ld b/ports/cortex_a5/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a5/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a5/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a5/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a5/gnu/example_build/tx_initialize_low_level.S
index ed2149dca..ad84429f7 100644
--- a/ports/cortex_a5/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a5/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,17 +101,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
@@ -183,7 +173,7 @@ _stack_error_loop:
MOV r0, #0x1F
BL setPriorityMask // Set priority mask (local)
- // [EL] Change start - don't enable interrupts here!
+ // [EL] Change start - don't enable interrupts here!
//CPSIE i // Clear CPSR I bit
// [EL] Change end
@@ -246,7 +236,7 @@ __tx_irq_processing_return:
if nested IRQ interrupts are desired. Interrupts may be re-enabled over
small code sequences where lr is saved before enabling interrupts and
restored after interrupts are again disabled. */
-
+
PUSH {r4, r5} // Save some preserved registers (r5 is saved just for 8-byte alignment)
BL readIntAck
MOV r4, r0
diff --git a/ports/cortex_a5/gnu/example_build/v7.h b/ports/cortex_a5/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a5/gnu/example_build/v7.h
+++ b/ports/cortex_a5/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a5/gnu/example_build/v7.s b/ports/cortex_a5/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a5/gnu/example_build/v7.s
+++ b/ports/cortex_a5/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a5/gnu/inc/tx_port.h b/ports/cortex_a5/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a5/gnu/inc/tx_port.h
+++ b/ports/cortex_a5/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a5/gnu/readme_threadx.txt b/ports/cortex_a5/gnu/readme_threadx.txt
index 9653bd11f..49cad39ef 100644
--- a/ports/cortex_a5/gnu/readme_threadx.txt
+++ b/ports/cortex_a5/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A5
+ Microsoft's Azure RTOS ThreadX for Cortex-A5
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-A5 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-A5 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A5 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -483,7 +483,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a5/gnu/src/tx_thread_context_restore.S b/ports/cortex_a5/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a5/gnu/src/tx_thread_context_save.S b/ports/cortex_a5/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a5/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a5/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a5/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a5/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a5/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a5/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a5/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_schedule.S b/ports/cortex_a5/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a5/gnu/src/tx_thread_stack_build.S b/ports/cortex_a5/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_system_return.S b/ports/cortex_a5/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a5/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a5/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a5/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a5/gnu/src/tx_timer_interrupt.S b/ports/cortex_a5/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a5/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a5/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a5/iar/example_build/cstartup.s b/ports/cortex_a5/iar/example_build/cstartup.s
index 647de2e8e..b4ed8f87f 100644
--- a/ports/cortex_a5/iar/example_build/cstartup.s
+++ b/ports/cortex_a5/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/cortex_a5/iar/example_build/sample_threadx.c b/ports/cortex_a5/iar/example_build/sample_threadx.c
index 68cd97fe0..56f7cd55e 100644
--- a/ports/cortex_a5/iar/example_build/sample_threadx.c
+++ b/ports/cortex_a5/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,42 +85,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -128,23 +128,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -247,11 +247,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -310,7 +310,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -363,7 +363,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a5/iar/example_build/tx_initialize_low_level.s b/ports/cortex_a5/iar/example_build/tx_initialize_low_level.s
index ca458fd30..3ca83a9f5 100644
--- a/ports/cortex_a5/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a5/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,45 +75,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a5/iar/inc/tx_port.h b/ports/cortex_a5/iar/inc/tx_port.h
index 74f6194a6..5ce81a277 100644
--- a/ports/cortex_a5/iar/inc/tx_port.h
+++ b/ports/cortex_a5/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A5/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A5/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -188,7 +180,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -202,18 +194,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -227,11 +219,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -241,23 +233,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -285,8 +277,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -297,22 +289,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -381,8 +373,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A5/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A5/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_a5/iar/readme_threadx.txt b/ports/cortex_a5/iar/readme_threadx.txt
index dc62701cc..6066b56be 100644
--- a/ports/cortex_a5/iar/readme_threadx.txt
+++ b/ports/cortex_a5/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A5
+ Microsoft's Azure RTOS ThreadX for Cortex-A5
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-A5 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-A5 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-A5 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-A5 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,146 +92,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -245,29 +245,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A5 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -278,12 +278,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -291,7 +291,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -304,7 +304,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -315,12 +315,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,24 +337,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -362,15 +362,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -378,7 +378,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -389,12 +389,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -403,7 +403,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -434,18 +434,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -463,7 +463,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -479,22 +479,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-A5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -506,14 +506,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a5/iar/src/tx_iar.c b/ports/cortex_a5/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_a5/iar/src/tx_iar.c
+++ b/ports/cortex_a5/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_a5/iar/src/tx_thread_context_restore.s b/ports/cortex_a5/iar/src/tx_thread_context_restore.s
index c54bd762a..5d8a88c2e 100644
--- a/ports/cortex_a5/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_a5/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,7 +36,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -51,47 +51,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +112,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -193,7 +184,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
@@ -206,7 +197,7 @@ __tx_thread_preempt_restore
VSTMDB sp!, {D0-D15} ; Save D0-D15
_tx_skip_fiq_vfp_save:
#endif
-
+
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
diff --git a/ports/cortex_a5/iar/src/tx_thread_context_save.s b/ports/cortex_a5/iar/src/tx_thread_context_save.s
index 493a09657..daa758ff6 100644
--- a/ports/cortex_a5/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_a5/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,46 +43,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -99,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -119,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -135,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -149,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -175,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -185,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -200,7 +191,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a5/iar/src/tx_thread_fiq_context_restore.s b/ports/cortex_a5/iar/src/tx_thread_fiq_context_restore.s
index e040244cd..549c3fff0 100644
--- a/ports/cortex_a5/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a5/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,47 +52,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +113,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +163,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -234,7 +225,7 @@ _tx_skip_irq_vfp_save:
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a5/iar/src/tx_thread_fiq_context_save.s b/ports/cortex_a5/iar/src/tx_thread_fiq_context_save.s
index f1510e0d2..c140517f8 100644
--- a/ports/cortex_a5/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a5/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -107,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -123,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -167,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -187,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_end.s
index 3b83f0e3e..6687874fb 100644
--- a/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,55 +34,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
diff --git a/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_start.s
index 68f9eba6f..e86e0cf33 100644
--- a/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a5/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a5/iar/src/tx_thread_interrupt_control.s b/ports/cortex_a5/iar/src/tx_thread_interrupt_control.s
index d1d8437ed..5e2938b38 100644
--- a/ports/cortex_a5/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a5/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,42 +35,36 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a5/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_a5/iar/src/tx_thread_interrupt_disable.s
index b9a39960d..519d01540 100644
--- a/ports/cortex_a5/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a5/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_a5/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_a5/iar/src/tx_thread_interrupt_restore.s
index 4b97a6c4b..c489feb00 100644
--- a/ports/cortex_a5/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a5/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a5/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_a5/iar/src/tx_thread_irq_nesting_end.s
index a5a6f15f4..9a7d94415 100644
--- a/ports/cortex_a5/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a5/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,55 +35,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_a5/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_a5/iar/src/tx_thread_irq_nesting_start.s
index 8c4249742..6f2c34bd2 100644
--- a/ports/cortex_a5/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a5/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a5/iar/src/tx_thread_schedule.s b/ports/cortex_a5/iar/src/tx_thread_schedule.s
index 7565b57ad..9046c40a5 100644
--- a/ports/cortex_a5/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_a5/iar/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,48 +44,39 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -114,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -123,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -137,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -202,7 +194,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -222,7 +214,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -243,3 +235,4 @@ __tx_no_thread_to_disable:
END
+
diff --git a/ports/cortex_a5/iar/src/tx_thread_stack_build.s b/ports/cortex_a5/iar/src/tx_thread_stack_build.s
index 98039b47c..8edefc2c2 100644
--- a/ports/cortex_a5/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_a5/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A5 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a5/iar/src/tx_thread_system_return.s b/ports/cortex_a5/iar/src/tx_thread_system_return.s
index 32af6cec1..62a7f0b08 100644
--- a/ports/cortex_a5/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_a5/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,47 +42,38 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -115,7 +106,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/cortex_a5/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_a5/iar/src/tx_thread_vectored_context_save.s
index f928253d9..40cabfcbc 100644
--- a/ports/cortex_a5/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a5/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,46 +41,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A5/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -142,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -174,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a5/iar/src/tx_timer_interrupt.s b/ports/cortex_a5/iar/src/tx_timer_interrupt.s
index ddbfda9e9..a68892869 100644
--- a/ports/cortex_a5/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_a5/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a53/ac6/example_build/sample_threadx/.cproject
index f51a736a2..deae61b3a 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a53/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a53/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a53/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a53/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a53/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a53/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a53/ac6/example_build/tx/.cproject b/ports/cortex_a53/ac6/example_build/tx/.cproject
index 35fed0f2d..c984b7ff3 100644
--- a/ports/cortex_a53/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a53/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a53/ac6/inc/tx_port.h b/ports/cortex_a53/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a53/ac6/inc/tx_port.h
+++ b/ports/cortex_a53/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a53/ac6/src/tx_initialize_low_level.S b/ports/cortex_a53/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a53/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a53/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_context_restore.S b/ports/cortex_a53/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_context_save.S b/ports/cortex_a53/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a53/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a53/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a53/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a53/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a53/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a53/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a53/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a53/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a53/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_schedule.S b/ports/cortex_a53/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a53/ac6/src/tx_thread_stack_build.S b/ports/cortex_a53/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a53/ac6/src/tx_thread_system_return.S b/ports/cortex_a53/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a53/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a53/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a53/ac6/src/tx_timer_interrupt.S b/ports/cortex_a53/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a53/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a53/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a53/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a53/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a53/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a53/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a53/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a53/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a53/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a53/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a53/gnu/example_build/tx/.cproject b/ports/cortex_a53/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a53/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a53/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a53/gnu/inc/tx_port.h b/ports/cortex_a53/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a53/gnu/inc/tx_port.h
+++ b/ports/cortex_a53/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a53/gnu/src/tx_initialize_low_level.S b/ports/cortex_a53/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a53/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a53/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a53/gnu/src/tx_thread_context_restore.S b/ports/cortex_a53/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_context_save.S b/ports/cortex_a53/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a53/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a53/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a53/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a53/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a53/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a53/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a53/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a53/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a53/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_schedule.S b/ports/cortex_a53/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a53/gnu/src/tx_thread_stack_build.S b/ports/cortex_a53/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a53/gnu/src/tx_thread_system_return.S b/ports/cortex_a53/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a53/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a53/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a53/gnu/src/tx_timer_interrupt.S b/ports/cortex_a53/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a53/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a53/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a55/ac6/example_build/sample_threadx/.cproject
index f4e329dcd..96dec1daa 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a55/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a55/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a55/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a55/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a55/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a55/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a55/ac6/example_build/tx/.cproject b/ports/cortex_a55/ac6/example_build/tx/.cproject
index 0d6f5a105..9345d6981 100644
--- a/ports/cortex_a55/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a55/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a55/ac6/inc/tx_port.h b/ports/cortex_a55/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a55/ac6/inc/tx_port.h
+++ b/ports/cortex_a55/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a55/ac6/src/tx_initialize_low_level.S b/ports/cortex_a55/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a55/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a55/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_context_restore.S b/ports/cortex_a55/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_context_save.S b/ports/cortex_a55/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a55/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a55/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a55/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a55/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a55/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a55/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a55/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a55/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a55/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_schedule.S b/ports/cortex_a55/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a55/ac6/src/tx_thread_stack_build.S b/ports/cortex_a55/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a55/ac6/src/tx_thread_system_return.S b/ports/cortex_a55/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a55/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a55/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a55/ac6/src/tx_timer_interrupt.S b/ports/cortex_a55/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a55/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a55/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a55/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a55/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a55/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a55/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a55/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a55/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a55/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a55/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a55/gnu/example_build/tx/.cproject b/ports/cortex_a55/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a55/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a55/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a55/gnu/inc/tx_port.h b/ports/cortex_a55/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a55/gnu/inc/tx_port.h
+++ b/ports/cortex_a55/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a55/gnu/src/tx_initialize_low_level.S b/ports/cortex_a55/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a55/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a55/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a55/gnu/src/tx_thread_context_restore.S b/ports/cortex_a55/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_context_save.S b/ports/cortex_a55/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a55/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a55/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a55/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a55/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a55/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a55/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a55/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a55/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a55/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_schedule.S b/ports/cortex_a55/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a55/gnu/src/tx_thread_stack_build.S b/ports/cortex_a55/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a55/gnu/src/tx_thread_system_return.S b/ports/cortex_a55/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a55/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a55/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a55/gnu/src/tx_timer_interrupt.S b/ports/cortex_a55/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a55/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a55/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a57/ac6/example_build/sample_threadx/.cproject
index d6254b986..c8f4a8799 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a57/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a57/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a57/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a57/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a57/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a57/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a57/ac6/example_build/tx/.cproject b/ports/cortex_a57/ac6/example_build/tx/.cproject
index 5ce4655a4..fce48d53d 100644
--- a/ports/cortex_a57/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a57/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a57/ac6/inc/tx_port.h b/ports/cortex_a57/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a57/ac6/inc/tx_port.h
+++ b/ports/cortex_a57/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a57/ac6/src/tx_initialize_low_level.S b/ports/cortex_a57/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a57/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a57/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_context_restore.S b/ports/cortex_a57/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_context_save.S b/ports/cortex_a57/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a57/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a57/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a57/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a57/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a57/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a57/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a57/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a57/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a57/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_schedule.S b/ports/cortex_a57/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a57/ac6/src/tx_thread_stack_build.S b/ports/cortex_a57/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a57/ac6/src/tx_thread_system_return.S b/ports/cortex_a57/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a57/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a57/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a57/ac6/src/tx_timer_interrupt.S b/ports/cortex_a57/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a57/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a57/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a57/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a57/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a57/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a57/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a57/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a57/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a57/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a57/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a57/gnu/example_build/tx/.cproject b/ports/cortex_a57/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a57/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a57/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a57/gnu/inc/tx_port.h b/ports/cortex_a57/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a57/gnu/inc/tx_port.h
+++ b/ports/cortex_a57/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a57/gnu/src/tx_initialize_low_level.S b/ports/cortex_a57/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a57/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a57/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a57/gnu/src/tx_thread_context_restore.S b/ports/cortex_a57/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_context_save.S b/ports/cortex_a57/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a57/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a57/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a57/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a57/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a57/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a57/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a57/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a57/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a57/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_schedule.S b/ports/cortex_a57/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a57/gnu/src/tx_thread_stack_build.S b/ports/cortex_a57/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a57/gnu/src/tx_thread_system_return.S b/ports/cortex_a57/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a57/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a57/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a57/gnu/src/tx_timer_interrupt.S b/ports/cortex_a57/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a57/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a57/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a5x/ac6/example_build/sample_threadx/.cproject
index f407d39b1..46377ece1 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/.cproject
@@ -1,154 +1,154 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/armv8_aarch64_SystemTimer.S b/ports/cortex_a5x/ac6/example_build/sample_threadx/armv8_aarch64_SystemTimer.S
index aaf0f7f8a..958c90c34 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/armv8_aarch64_SystemTimer.S
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/armv8_aarch64_SystemTimer.S
@@ -4,7 +4,7 @@
// Copyright ARM Ltd 2013. All rights reserved.
// ------------------------------------------------------------
-
+
.section AArch64_GenericTimer,"ax"
.align 3
@@ -14,10 +14,10 @@
// uint32_t getCNTFRQ(void)
// Returns the value of CNTFRQ_EL0
.type getCNTFRQ, @function
-getCNTFRQ:
+getCNTFRQ:
MRS x0, CNTFRQ_EL0
RET
-
+
// ------------------------------------------------------------
@@ -26,7 +26,7 @@ getCNTFRQ:
// Sets the value of CNTFRQ_EL0 (only possible at EL3)
// w0 - freq - The value to be written into CNTFRQ_EL0
.type setCNTFRQ, @function
-setCNTFRQ:
+setCNTFRQ:
MSR CNTFRQ_EL0, x0
RET
@@ -37,10 +37,10 @@ setCNTFRQ:
// uint64_t getPhysicalCount(void)
// Returns the current value of physical count (CNTPCT_EL0)
.type getPhysicalCount, @function
-getPhysicalCount:
+getPhysicalCount:
MRS x0, CNTPCT_EL0
RET
-
+
// ------------------------------------------------------------
@@ -48,10 +48,10 @@ getPhysicalCount:
// uint64_t getVirtualCount(void)
// Returns the current value of the virtual count register (CNTVCT_EL0)
.type getVirtualCount, @function
-getVirtualCount:
+getVirtualCount:
MRS x0, CNTVCT_EL0
RET
-
+
// ------------------------------------------------------------
@@ -59,10 +59,10 @@ getVirtualCount:
// uint32_t getEL1Ctrl(void)
// Returns the value of EL1 Timer Control Register (CNTKCTL_EL1)
.type getEL1Ctrl, @function
-getEL1Ctrl:
+getEL1Ctrl:
MRS x0, CNTKCTL_EL1
RET
-
+
// ------------------------------------------------------------
@@ -71,10 +71,10 @@ getEL1Ctrl:
// Sets the value of Counter Non-secure EL1 Control Register (CNTKCTL_EL1)
// 0 - value - The value to be written into CNTKCTL_EL1
.type setEL1Ctrl, @function
-setEL1Ctrl:
+setEL1Ctrl:
MSR CNTKCTL_EL1, x0
RET
-
+
// ------------------------------------------------------------
@@ -82,10 +82,10 @@ setEL1Ctrl:
// uint32_t getEL2Ctrl(void)
// Returns the value of the EL2 Timer Control Register (CNTHCTL_EL2)
.type getEL2Ctrl, @function
-getEL2Ctrl:
+getEL2Ctrl:
MRS x0, CNTHCTL_EL2
RET
-
+
// ------------------------------------------------------------
@@ -94,10 +94,10 @@ getEL2Ctrl:
// Sets the value of the EL2 Timer Control Register (CNTHCTL_EL2)
// x0 - value - The value to be written into CNTHCTL_EL2
.type setEL2Ctrl, @function
-setEL2Ctrl:
+setEL2Ctrl:
MSR CNTHCTL_EL2, x0
RET
-
+
// ------------------------------------------------------------
// Non-Secure Physical Timer
@@ -107,10 +107,10 @@ setEL2Ctrl:
// uint64_t getNSEL1PhysicalCompValue(void)
// Returns the value of Non-Secure EL1 Physical Compare Value Register (CNTP_CVAL_EL0)
.type getNSEL1PhysicalCompValue, @function
-getNSEL1PhysicalCompValue:
+getNSEL1PhysicalCompValue:
MRS x0, CNTP_CVAL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -119,10 +119,10 @@ getNSEL1PhysicalCompValue:
// Sets the value of the Non-Secure EL1 Physical Compare Value Register (CNTP_CVAL_EL0)
// x0 - value - The value to be written into CNTP_CVAL_EL0
.type setNSEL1PhysicalCompValue, @function
-setNSEL1PhysicalCompValue:
+setNSEL1PhysicalCompValue:
MSR CNTP_CVAL_EL0, x0
RET
-
+
// ------------------------------------------------------------
@@ -130,10 +130,10 @@ setNSEL1PhysicalCompValue:
// uint32_t getNSEL1PhysicalTimerValue(void)
// Returns the value of Non-Secure EL1 Physical Timer Value Register (CNTP_TVAL_EL0)
.type getNSEL1PhysicalTimerValue, @function
-getNSEL1PhysicalTimerValue:
+getNSEL1PhysicalTimerValue:
MRS x0, CNTP_TVAL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -142,10 +142,10 @@ getNSEL1PhysicalTimerValue:
// Sets the value of the Non-Secure EL1 Physical Timer Value Register (CNTP_TVAL_EL0)
// w0 - value - The value to be written into CNTP_TVAL_EL0
.type setNSEL1PhysicalTimerValue, @function
-setNSEL1PhysicalTimerValue:
+setNSEL1PhysicalTimerValue:
MSR CNTP_TVAL_EL0, x0
RET
-
+
// ------------------------------------------------------------
@@ -153,10 +153,10 @@ setNSEL1PhysicalTimerValue:
// uint32_t getNSEL1PhysicalTimerCtrl(void)
// Returns the value of Non-Secure EL1 Physical Timer Control Register (CNTP_CTL_EL0)
.type getNSEL1PhysicalTimerCtrl, @function
-getNSEL1PhysicalTimerCtrl:
+getNSEL1PhysicalTimerCtrl:
MRS x0, CNTP_CTL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -165,10 +165,10 @@ getNSEL1PhysicalTimerCtrl:
// Sets the value of the Non-Secure EL1 Physical Timer Control Register (CNTP_CTL_EL0)
// w0 - value - The value to be written into CNTP_CTL_EL0
.type setNSEL1PhysicalTimerCtrl, @function
-setNSEL1PhysicalTimerCtrl:
+setNSEL1PhysicalTimerCtrl:
MSR CNTP_CTL_EL0, x0
RET
-
+
// ------------------------------------------------------------
// Secure Physical Timer
@@ -178,10 +178,10 @@ setNSEL1PhysicalTimerCtrl:
// uint64_t getSEL1PhysicalCompValue(void)
// Returns the value of Secure EL1 Physical Compare Value Register (CNTPS_CVAL_EL1)
.type getSEL1PhysicalCompValue, @function
-getSEL1PhysicalCompValue:
+getSEL1PhysicalCompValue:
MRS x0, CNTPS_CVAL_EL1
RET
-
+
// ------------------------------------------------------------
@@ -190,10 +190,10 @@ getSEL1PhysicalCompValue:
// Sets the value of the Secure EL1 Physical Compare Value Register (CNTPS_CVAL_EL1)
// x0 - value - The value to be written into CNTPS_CVAL_EL1
.type setSEL1PhysicalCompValue, @function
-setSEL1PhysicalCompValue:
+setSEL1PhysicalCompValue:
MSR CNTPS_CVAL_EL1, x0
RET
-
+
// ------------------------------------------------------------
@@ -202,10 +202,10 @@ setSEL1PhysicalCompValue:
// uint32_t getSEL1PhysicalTimerValue(void)
// Returns the value of Secure EL1 Physical Timer Value Register (CNTPS_TVAL_EL1)
.type getSEL1PhysicalTimerValue, @function
-getSEL1PhysicalTimerValue:
+getSEL1PhysicalTimerValue:
MRS x0, CNTPS_TVAL_EL1
RET
-
+
// ------------------------------------------------------------
@@ -214,10 +214,10 @@ getSEL1PhysicalTimerValue:
// Sets the value of the Secure EL1 Physical Timer Value Register (CNTPS_TVAL_EL1)
// w0 - value - The value to be written into CNTPS_TVAL_EL1
.type setSEL1PhysicalTimerValue, @function
-setSEL1PhysicalTimerValue:
+setSEL1PhysicalTimerValue:
MSR CNTPS_TVAL_EL1, x0
RET
-
+
// ------------------------------------------------------------
@@ -225,10 +225,10 @@ setSEL1PhysicalTimerValue:
// uint32_t getSEL1PhysicalTimerCtrl(void)
// Returns the value of Secure EL1 Physical Timer Control Register (CNTPS_CTL_EL1)
.type getSEL1PhysicalTimerCtrl, @function
-getSEL1PhysicalTimerCtrl:
+getSEL1PhysicalTimerCtrl:
MRS x0, CNTPS_CTL_EL1
RET
-
+
// ------------------------------------------------------------
@@ -237,11 +237,11 @@ getSEL1PhysicalTimerCtrl:
// Sets the value of the Secure EL1 Physical Timer Control Register (CNTPS_CTL_EL1)
// w0 - value - The value to be written into CNTPS_CTL_EL1
.type setSEL1PhysicalTimerCtrl, @function
-setSEL1PhysicalTimerCtrl:
+setSEL1PhysicalTimerCtrl:
MSR CNTPS_CTL_EL1, x0
RET
-
-
+
+
// ------------------------------------------------------------
.global configSecureEL1TimerAccess
@@ -249,12 +249,12 @@ setSEL1PhysicalTimerCtrl:
// Sets the values of the SCR_EL3.ST bit (bit 11) based on the value in x0
// EL3 accessible only!
.type configSecureEL1TimerAccess, @function
-configSecureEL1TimerAccess:
+configSecureEL1TimerAccess:
MRS x1, SCR_EL3
BFI x1, x0, #11, #1
MSR SCR_EL3, x1
RET
-
+
// ------------------------------------------------------------
// Virtual Timer
@@ -264,10 +264,10 @@ configSecureEL1TimerAccess:
// uint64_t getEL1VirtualCompValue(void)
// Returns the value of EL1 Virtual Compare Value Register (CNTV_CVAL_EL0)
.type getEL1VirtualCompValue, @function
-getEL1VirtualCompValue:
+getEL1VirtualCompValue:
MRS x0, CNTV_CVAL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -276,7 +276,7 @@ getEL1VirtualCompValue:
// Sets the value of the EL1 Virtual Compare Value Register (CNTV_CVAL_EL0)
// x0 - value - The value to be written into CNTV_CVAL_EL0
.type setEL1VirtualCompValue, @function
-setEL1VirtualCompValue:
+setEL1VirtualCompValue:
MSR CNTV_CVAL_EL0, x0
RET
@@ -287,10 +287,10 @@ setEL1VirtualCompValue:
// uint32_t getEL1VirtualTimerValue(void)
// Returns the value of EL1 Virtual Timer Value Register (CNTV_TVAL_EL0)
.type getEL1VirtualTimerValue, @function
-getEL1VirtualTimerValue:
+getEL1VirtualTimerValue:
MRS x0, CNTV_TVAL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -299,10 +299,10 @@ getEL1VirtualTimerValue:
// Sets the value of the EL1 Virtual Timer Value Register (CNTV_TVAL_EL0)
// w0 - value - The value to be written into CNTV_TVAL_EL0
.type setEL1VirtualTimerValue, @function
-setEL1VirtualTimerValue:
+setEL1VirtualTimerValue:
MSR CNTV_TVAL_EL0, x0
RET
-
+
// ------------------------------------------------------------
@@ -310,10 +310,10 @@ setEL1VirtualTimerValue:
// uint32_t getEL1VirtualTimerCtrl(void)
// Returns the value of EL1 Virtual Timer Control Register (CNTV_CTL_EL0)
.type getEL1VirtualTimerCtrl, @function
-getEL1VirtualTimerCtrl:
+getEL1VirtualTimerCtrl:
MRS x0, CNTV_CTL_EL0
RET
-
+
// ------------------------------------------------------------
@@ -322,11 +322,11 @@ getEL1VirtualTimerCtrl:
// Sets the value of the EL1 Virtual Timer Control Register (CNTV_CTL_EL0)
// w0 - value - The value to be written into CNTV_CTL_EL0
.type setEL1VirtualTimerCtrl, @function
-setEL1VirtualTimerCtrl:
+setEL1VirtualTimerCtrl:
MSR CNTV_CTL_EL0, x0
RET
-
-
+
+
// ------------------------------------------------------------
// Virtual Timer functions to be called by EL2
// ------------------------------------------------------------
@@ -336,10 +336,10 @@ setEL1VirtualTimerCtrl:
// Returns the value of the Counter Virtual Offset Register (CNTVOFF_EL2)
// EL2 and EL3 only
.type getVirtualCounterOffset, @function
-getVirtualCounterOffset:
+getVirtualCounterOffset:
MRS x0, CNTVOFF_EL2
RET
-
+
// ------------------------------------------------------------
@@ -349,11 +349,11 @@ getVirtualCounterOffset:
// x0 - offset - The value to be written into CNTVOFF_EL2
// EL2 and EL3 only
.type setVirtualCounterOffset, @function
-setVirtualCounterOffset:
+setVirtualCounterOffset:
MSR CNTVOFF_EL2, x0
RET
-
-
+
+
// ------------------------------------------------------------
// EL2 Physical Timer
// ------------------------------------------------------------
@@ -362,10 +362,10 @@ setVirtualCounterOffset:
// uint64_t getEL2PhysicalCompValue(void)
// Returns the value of EL2 Physical Compare Value Register (CNTHP_CVAL_EL2)
.type getEL2PhysicalCompValue, @function
-getEL2PhysicalCompValue:
+getEL2PhysicalCompValue:
MRS x0, CNTHP_CVAL_EL2
RET
-
+
// ------------------------------------------------------------
@@ -374,10 +374,10 @@ getEL2PhysicalCompValue:
// Sets the value of the EL2 Physical Compare Value Register (CNTHP_CVAL_EL2)
// x0 - value - The value to be written into CNTHP_CVAL_EL2
.type setEL2PhysicalCompValue, @function
-setEL2PhysicalCompValue:
+setEL2PhysicalCompValue:
MSR CNTHP_CVAL_EL2, x0
RET
-
+
// ------------------------------------------------------------
@@ -386,10 +386,10 @@ setEL2PhysicalCompValue:
// uint32_t getEL2PhysicalTimerValue(void)
// Returns the value of EL2 Physical Timer Value Register (CNTHP_TVAL_EL2)
.type getEL2PhysicalTimerValue, @function
-getEL2PhysicalTimerValue:
+getEL2PhysicalTimerValue:
MRS x0, CNTHP_TVAL_EL2
RET
-
+
// ------------------------------------------------------------
@@ -398,10 +398,10 @@ getEL2PhysicalTimerValue:
// Sets the value of the EL2 Physical Timer Value Register (CNTHP_TVAL_EL2)
// w0 - value - The value to be written into CNTHP_TVAL_EL2
.type setEL2PhysicalTimerValue, @function
-setEL2PhysicalTimerValue:
+setEL2PhysicalTimerValue:
MSR CNTHP_TVAL_EL2, x0
RET
-
+
// ------------------------------------------------------------
@@ -409,10 +409,10 @@ setEL2PhysicalTimerValue:
// uint32_t getEL2PhysicalTimerCtrl(void)
// Returns the value of EL2 Physical Timer Control Register (CNTHP_CTL_EL2)
.type getEL2PhysicalTimerCtrl, @function
-getEL2PhysicalTimerCtrl:
+getEL2PhysicalTimerCtrl:
MRS x0, CNTHP_CTL_EL2
RET
-
+
// ------------------------------------------------------------
@@ -421,10 +421,10 @@ getEL2PhysicalTimerCtrl:
// Sets the value of the EL2 Physical Timer Control Register (CNTHP_CTL_EL2)
// w0 - value - The value to be written into CNTHP_CTL_EL2
.type setEL2PhysicalTimerCtrl, @function
-setEL2PhysicalTimerCtrl:
+setEL2PhysicalTimerCtrl:
MSR CNTHP_CTL_EL2, x0
RET
-
+
// ------------------------------------------------------------
// End of code
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/el3_vectors.S b/ports/cortex_a5x/ac6/example_build/sample_threadx/el3_vectors.S
index 7f4effe7a..b76a789ec 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/el3_vectors.S
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/el3_vectors.S
@@ -6,8 +6,8 @@
.section VECTORS,"ax"
.align 12
-
-
+
+
.global el3_vectors
el3_vectors:
@@ -59,7 +59,7 @@ serror_current_el_spx:
.balign 128
sync_lower_el_aarch64:
- B .
+ B .
.balign 128
irq_lower_el_aarch64:
@@ -103,7 +103,7 @@ irqFirstLevelHandler:
BL irqHandler
B _tx_thread_context_restore
-
+
fiqFirstLevelHandler:
STP x29, x30, [sp, #-16]!
STP x18, x19, [sp, #-16]!
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/gic400_gic.c b/ports/cortex_a5x/ac6/example_build/sample_threadx/gic400_gic.c
index 1ecd5f33e..d37d4c270 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/gic400_gic.c
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/gic400_gic.c
@@ -102,7 +102,7 @@ void enableIntID(unsigned int ID)
void disableIntID(unsigned int ID)
{
unsigned int bank;
-
+
bank = ID/32; // There are 32 IDs per register, need to work out which register to access
ID = ID & 0x1f; // ... and which bit within the register
@@ -136,7 +136,7 @@ unsigned int getIntPriority(unsigned int ID)
return 0;
return gic_dist->GICD_IPRIORITYR[ID];
-}
+}
// ------------------------------------------------------------
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/hw_setup.c b/ports/cortex_a5x/ac6/example_build/sample_threadx/hw_setup.c
index dc19cd3bd..3f86523a3 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/hw_setup.c
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/hw_setup.c
@@ -58,7 +58,7 @@ void hw_setup(void)
// NOTE:
// This code assumes that the IRQ and FIQ exceptions
- // have been routed to the appropriate EL. In this
+ // have been routed to the appropriate EL. In this
// example that is done in the startup.s file
}
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.c
index db5318f08..3e4c45a5b 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -91,42 +91,42 @@ UCHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -134,23 +134,23 @@ UCHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -254,11 +254,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -317,7 +317,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -370,7 +370,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.txt b/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.txt
index 90c80d288..6fb28be11 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.txt
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/sample_threadx.txt
@@ -9,7 +9,7 @@ LOAD 0x80000000
{
* (+RW, +ZI)
}
-
+
ARM_LIB_STACKHEAP 0x80090000 EMPTY -0x00040000
{}
}
\ No newline at end of file
diff --git a/ports/cortex_a5x/ac6/example_build/sample_threadx/startup.S b/ports/cortex_a5x/ac6/example_build/sample_threadx/startup.S
index 8b1f8f3bb..75ae62c88 100644
--- a/ports/cortex_a5x/ac6/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a5x/ac6/example_build/sample_threadx/startup.S
@@ -99,7 +99,7 @@ start64:
MOV x28, #0
MOV x29, #0
MOV x30, #0
-
+
// Which core am I
// ----------------
MRS x0, MPIDR_EL1
@@ -109,20 +109,20 @@ sleep:
WFI
B sleep
boot:
-
+
// Disable trapping of CPTR_EL3 accesses or use of Adv.SIMD/FPU
// -------------------------------------------------------------
MOV x0, #0 // Clear all trap bits
MSR CPTR_EL3, x0
-
-
+
+
// Install vector table
// ---------------------
LDR x0, vector_table_address
MSR VBAR_EL3, x0
-
+
// Configure SCR_EL3
// ------------------
MOV w1, #0 // Initial value of register is unknown
diff --git a/ports/cortex_a5x/ac6/example_build/tx/.cproject b/ports/cortex_a5x/ac6/example_build/tx/.cproject
index 0bc693060..b3e802357 100644
--- a/ports/cortex_a5x/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a5x/ac6/example_build/tx/.cproject
@@ -1,140 +1,140 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a5x/ac6/inc/tx_port.h b/ports/cortex_a5x/ac6/inc/tx_port.h
index 4de50b9f5..c679690c5 100644
--- a/ports/cortex_a5x/ac6/inc/tx_port.h
+++ b/ports/cortex_a5x/ac6/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A5x/ARM */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -122,19 +114,19 @@ typedef unsigned long long ALIGN_TYPE;
#define TX_TIMER_THREAD_STACK_SIZE 4096 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
#define TX_INT_ENABLE 0x00 /* Enable IRQ & FIQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -181,7 +173,7 @@ typedef unsigned long long ALIGN_TYPE;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -193,13 +185,13 @@ typedef unsigned long long ALIGN_TYPE;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_fp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -213,11 +205,11 @@ typedef unsigned long long ALIGN_TYPE;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -225,8 +217,8 @@ typedef unsigned long long ALIGN_TYPE;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -253,8 +245,8 @@ typedef unsigned long long ALIGN_TYPE;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -266,7 +258,7 @@ typedef unsigned long long ALIGN_TYPE;
/* Define the internal timer extension to also hold the thread pointer such that _tx_thread_timeout
can figure out what thread timeout to process. */
-
+
#define TX_TIMER_INTERNAL_EXTENSION VOID *tx_timer_internal_thread_timeout_ptr;
@@ -282,9 +274,9 @@ typedef unsigned long long ALIGN_TYPE;
#define TX_THREAD_TIMEOUT_POINTER_SETUP(t) (t) = (TX_THREAD *) _tx_timer_expired_timer_ptr -> tx_timer_internal_thread_timeout_ptr;
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -355,8 +347,8 @@ VOID tx_thread_fp_disable(VOID);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A5x/ARM Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A5x/ARM Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a5x/ac6/readme_threadx.txt b/ports/cortex_a5x/ac6/readme_threadx.txt
index c3de31bb1..5e80754d4 100644
--- a/ports/cortex_a5x/ac6/readme_threadx.txt
+++ b/ports/cortex_a5x/ac6/readme_threadx.txt
@@ -1,11 +1,11 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A5x
+ Microsoft's Azure RTOS ThreadX for Cortex-A5x
Using the ARM Compiler 6 & DS
-1. Open the Azure RTOS Workspace
+1. Open the Azure RTOS Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace, which is located inside your ThreadX installation
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace, which is located inside your ThreadX installation
directory.
Note: the workspace and projects were made using DS-5, so DS will prompt you
@@ -13,9 +13,9 @@ to migrate the projects. This is expected, so please do so.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the Eclipse project file
-"tx" and then select the build button. You should now observe the compilation
-and assembly of the ThreadX library. This project build produces the ThreadX
+Building the ThreadX library is easy; simply select the Eclipse project file
+"tx" and then select the build button. You should now observe the compilation
+and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -24,39 +24,39 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
VE-AEMv8x1 Bare Metal simulator.
-Building the demonstration is easy; simply open the workspace file, select the
-sample_threadx project, and select the build button. Next, right-click on the
+Building the demonstration is easy; simply open the workspace file, select the
+sample_threadx project, and select the build button. Next, right-click on the
project and select "Debug As -> Debug Configurations". The debugger is setup
-for VE_AEMv8x1 Bare Metal Debug, so selecting "Debug" will launch the simulator,
-load the sample_threadx.axf ELF file and run to main. You are now ready to
+for VE_AEMv8x1 Bare Metal Debug, so selecting "Debug" will launch the simulator,
+load the sample_threadx.axf ELF file and run to main. You are now ready to
execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A5x using ARM tools is at label
-start64. This is defined within the ARM compiler's startup code. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A5x using ARM tools is at label
+start64. This is defined within the ARM compiler's startup code. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for determining the
-first available RAM address for use by the application, which is supplied as the
+The ThreadX tx_initialize_low_level.s file is responsible for determining the
+first available RAM address for use by the application, which is supplied as the
sole input parameter to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The 64-bit ARM compiler assumes that registers x0-x18 are scratch registers
-for each function. All other registers used by a C function must be preserved
-by the function. ThreadX takes advantage of this in situations where a context
-switch happens as a result of making a ThreadX service call (which is itself a
-C function). In such cases, the saved context of a thread is only the
+The 64-bit ARM compiler assumes that registers x0-x18 are scratch registers
+for each function. All other registers used by a C function must be preserved
+by the function. ThreadX takes advantage of this in situations where a context
+switch happens as a result of making a ThreadX service call (which is itself a
+C function). In such cases, the saved context of a thread is only the
non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -75,10 +75,10 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x040 x22 x21
0x048 x23 x22
0x050 x20 x19
- 0x058 x21 x20
- 0x060 x18 x29
- 0x068 x19 x30
- 0x070 x16
+ 0x058 x21 x20
+ 0x060 x18 x29
+ 0x068 x19 x30
+ 0x070 x16
0x078 x17
0x080 x14
0x088 x15
@@ -97,7 +97,7 @@ FP not enabled and TX_THREAD.tx_thread_fp_enable == 0:
0x0F0 x0
0x0F8 x1
0x100 x29
- 0x108 x30
+ 0x108 x30
FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
@@ -146,19 +146,19 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x1F0 q3
0x200 q0
0x210 q1
- 0x220 x28
- 0x228 reserved
- 0x230 x26
- 0x238 x27
- 0x240 x24
- 0x248 x25
- 0x250 x22
- 0x258 x23
- 0x260 x20
- 0x268 x21
- 0x270 x18
- 0x278 x19
- 0x280 x16
+ 0x220 x28
+ 0x228 reserved
+ 0x230 x26
+ 0x238 x27
+ 0x240 x24
+ 0x248 x25
+ 0x250 x22
+ 0x258 x23
+ 0x260 x20
+ 0x268 x21
+ 0x270 x18
+ 0x278 x19
+ 0x280 x16
0x288 x17
0x290 x14
0x298 x15
@@ -177,20 +177,20 @@ FP enabled and TX_THREAD.tx_thread_fp_enable == 1:
0x300 x0
0x308 x1
0x310 x29
- 0x318 x30
+ 0x318 x30
6. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
you can change the project settings to the desired compiler optimization level.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
@@ -210,22 +210,22 @@ irq_handler:
B _tx_thread_context_restore
-By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
+By default, ThreadX assumes EL3 level of execution. Running and taking exceptions in EL1
and EL2 can be done by simply building the ThreadX library with either EL1 or EL2 defined.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
-timeouts, and application timers. Without such a timer interrupt source, these services
-are not functional. However, all other ThreadX services are operational without a
+ThreadX requires a periodic interrupt source to manage all time-slicing, thread sleeps,
+timeouts, and application timers. Without such a timer interrupt source, these services
+are not functional. However, all other ThreadX services are operational without a
periodic timer source.
9. ARM FP Support
By default, FP support is disabled for each thread. If saving the context of the FP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the FP usage:
void tx_thread_fp_enable(void);
diff --git a/ports/cortex_a5x/ac6/src/tx_initialize_low_level.S b/ports/cortex_a5x/ac6/src/tx_initialize_low_level.S
index a45da7c19..1b8d1d8d0 100644
--- a/ports/cortex_a5x/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a5x/ac6/src/tx_initialize_low_level.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Initialize */
/** */
@@ -34,45 +35,39 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_initialize_low_level Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for any low-level processor */
-/* initialization, including setting up interrupt vectors, setting */
-/* up a periodic timer interrupt source, saving the system stack */
-/* pointer for use in ISR processing later, and finding the first */
-/* available RAM memory address for tx_application_define. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
/**************************************************************************/
/* VOID _tx_initialize_low_level(VOID)
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_context_restore.S b/ports/cortex_a5x/ac6/src/tx_thread_context_restore.S
index 35674a257..5220dc797 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_context_restore.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -25,7 +26,7 @@
/* Include necessary system files. */
-/*
+/*
#include "tx_api.h"
#include "tx_thread.h"
#include "tx_timer.h"
@@ -35,44 +36,38 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_context_restore Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_restore Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function restores the interrupt context if it is processing a */
-/* nested interrupt. If not, it returns to the interrupt thread if no */
-/* preemption is necessary. Otherwise, if preemption is necessary or */
-/* if no thread was running, the function returns to the scheduler. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_thread_schedule Thread scheduling routine */
-/* */
-/* CALLED BY */
-/* */
-/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function restores the interrupt context if it is processing a */
+/* nested interrupt. If not, it returns to the interrupt thread if no */
+/* preemption is necessary. Otherwise, if preemption is necessary or */
+/* if no thread was running, the function returns to the scheduler. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_schedule Thread scheduling routine */
+/* */
+/* CALLED BY */
+/* */
+/* ISRs Interrupt Service Routines */
/* */
/**************************************************************************/
/* VOID _tx_thread_context_restore(VOID)
@@ -99,13 +94,13 @@ _tx_thread_context_restore:
LDR x3, =_tx_thread_system_state // Pickup address of system state var
LDR w2, [x3, #0] // Pickup system state
SUB w2, w2, #1 // Decrement the counter
- STR w2, [x3, #0] // Store the counter
+ STR w2, [x3, #0] // Store the counter
CMP w2, #0 // Was this the first interrupt?
BEQ __tx_thread_not_nested_restore // If so, not a nested restore
/* Interrupts are nested. */
- /* Just recover the saved registers and return to the point of
+ /* Just recover the saved registers and return to the point of
interrupt. */
LDP x4, x5, [sp], #16 // Pickup saved SPSR/DAIF and ELR_EL
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_context_save.S b/ports/cortex_a5x/ac6/src/tx_thread_context_save.S
index f1af864e7..287e8fa32 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_context_save.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -32,43 +33,37 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_context_save Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_save Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function saves the context of an executing thread in the */
-/* beginning of interrupt processing. The function also ensures that */
-/* the system stack is used upon return to the calling ISR. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function saves the context of an executing thread in the */
+/* beginning of interrupt processing. The function also ensures that */
+/* the system stack is used upon return to the calling ISR. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISRs */
/* */
/**************************************************************************/
/* VOID _tx_thread_context_save(VOID)
@@ -78,7 +73,7 @@
_tx_thread_context_save:
/* Upon entry to this routine, it is assumed that IRQ/FIQ interrupts are locked
- out, x29 (frame pointer), x30 (link register) are saved, we are in EL1,
+ out, x29 (frame pointer), x30 (link register) are saved, we are in EL1,
and all other registers are intact. */
/* Check for a nested interrupt condition. */
@@ -147,7 +142,7 @@ __tx_thread_not_nested_save:
LDR x1, =_tx_thread_current_ptr // Pickup address of current thread ptr
LDR x0, [x1, #0] // Pickup current thread pointer
CMP x0, #0 // Is it NULL?
- BEQ __tx_thread_idle_system_save // If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save // If so, interrupt occurred in
// scheduling loop - nothing needs saving!
/* Save minimal context of interrupted thread. */
@@ -196,7 +191,7 @@ __tx_thread_not_nested_save:
LDP x29, x30, [sp], #16 // Recover x29, x30
.endif
- RET // Return to caller
+ RET // Return to caller
/* }
else
@@ -206,7 +201,7 @@ __tx_thread_idle_system_save:
/* Interrupt occurred in the scheduling loop. */
- /* Not much to do here, just adjust the stack pointer, and return to IRQ
+ /* Not much to do here, just adjust the stack pointer, and return to IRQ
processing. */
.ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@@ -219,7 +214,7 @@ __tx_thread_idle_system_save:
.endif
ADD sp, sp, #48 // Recover saved registers
- RET // Continue IRQ processing
+ RET // Continue IRQ processing
/* }
} */
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a5x/ac6/src/tx_thread_fp_disable.c
index e2a0f0846..2e3c5c77c 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a5x/ac6/src/tx_thread_fp_disable.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -28,41 +29,35 @@
#include "tx_thread.h"
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_fp_disable Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_fp_disable Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function disables the FP for the currently executing thread. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function disables the FP for the currently executing thread. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
@@ -81,14 +76,14 @@ ULONG system_state;
/* Make sure it is not NULL. */
if (thread_ptr != TX_NULL)
{
-
+
/* Thread is running... make sure the call is from the thread context. */
if (system_state == 0)
{
-
+
/* Yes, now set the FP enable flag to false in the TX_THREAD structure. */
thread_ptr -> tx_thread_fp_enable = TX_FALSE;
}
}
-}
+}
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a5x/ac6/src/tx_thread_fp_enable.c
index 2da34265e..ca589fe5e 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a5x/ac6/src/tx_thread_fp_enable.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -28,41 +29,35 @@
#include "tx_thread.h"
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_fp_enable Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_fp_enable Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function enabled the FP for the currently executing thread. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function enabled the FP for the currently executing thread. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
@@ -81,14 +76,14 @@ ULONG system_state;
/* Make sure it is not NULL. */
if (thread_ptr != TX_NULL)
{
-
+
/* Thread is running... make sure the call is from the thread context. */
if (system_state == 0)
{
-
+
/* Yes, now setup the FP enable flag in the TX_THREAD structure. */
thread_ptr -> tx_thread_fp_enable = TX_TRUE;
}
}
-}
+}
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_control.S
index 8eff07d98..264850df3 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_control.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -31,42 +32,36 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_interrupt_control Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_interrupt_control Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for changing the interrupt lockout */
-/* posture of the system. */
-/* */
-/* INPUT */
-/* */
-/* new_posture New interrupt lockout posture */
-/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt lockout posture */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is responsible for changing the interrupt lockout */
+/* posture of the system. */
+/* */
+/* INPUT */
+/* */
+/* new_posture New interrupt lockout posture */
+/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt lockout posture */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_disable.S
index 01ea803ca..7c4f6a7bb 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -31,41 +32,35 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_interrupt_disable Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_interrupt_disable Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for disabling interrupts */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt lockout posture */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is responsible for disabling interrupts */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt lockout posture */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_disable(void)
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_restore.S
index 7160f4f0d..83b916a71 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -31,42 +32,36 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_interrupt_restore Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_interrupt_restore Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function is responsible for restoring interrupts to the state */
/* returned by a previous _tx_thread_interrupt_disable call. */
-/* */
-/* INPUT */
-/* */
-/* old_posture Old interrupt lockout posture */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* INPUT */
+/* */
+/* old_posture Old interrupt lockout posture */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_schedule.S b/ports/cortex_a5x/ac6/src/tx_thread_schedule.S
index 42bd0e4fd..5651ad129 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_schedule.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -35,45 +36,39 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_schedule Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_schedule Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function waits for a thread control block pointer to appear in */
-/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-/* in the variable, the corresponding thread is resumed. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* This function waits for a thread control block pointer to appear in */
+/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+/* in the variable, the corresponding thread is resumed. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
/* None */
-/* */
-/* CALLS */
-/* */
+/* */
+/* CALLS */
+/* */
/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_initialize_kernel_enter ThreadX entry function */
-/* _tx_thread_system_return Return to system from thread */
-/* _tx_thread_context_restore Restore thread's context */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* _tx_thread_system_return Return to system from thread */
+/* _tx_thread_context_restore Restore thread's context */
/* */
/**************************************************************************/
/* VOID _tx_thread_schedule(VOID)
@@ -89,15 +84,15 @@ _tx_thread_schedule:
/* Wait for a thread to execute. */
/* do
{ */
-
+
LDR x1, =_tx_thread_execute_ptr // Address of thread execute ptr
.ifdef TX_ENABLE_WFI
__tx_thread_schedule_loop:
LDR x0, [x1, #0] // Pickup next thread to execute
CMP x0, #0 // Is it NULL?
- BNE _tx_thread_schedule_thread //
- WFI //
+ BNE _tx_thread_schedule_thread //
+ WFI //
B __tx_thread_schedule_loop // Keep looking for a thread
_tx_thread_schedule_thread:
.else
@@ -109,7 +104,7 @@ __tx_thread_schedule_loop:
/* }
while(_tx_thread_execute_ptr == TX_NULL); */
-
+
/* Yes! We have a thread to execute. Lockout interrupts and
transfer control to it. */
@@ -118,7 +113,7 @@ __tx_thread_schedule_loop:
/* Setup the current thread pointer. */
/* _tx_thread_current_ptr = _tx_thread_execute_ptr; */
- LDR x1, =_tx_thread_current_ptr // Pickup address of current thread
+ LDR x1, =_tx_thread_current_ptr // Pickup address of current thread
STR x0, [x1, #0] // Setup current thread pointer
/* Increment the run count for this thread. */
@@ -132,7 +127,7 @@ __tx_thread_schedule_loop:
/* Setup time-slice, if present. */
/* _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice; */
- LDR x2, =_tx_timer_time_slice // Pickup address of time slice
+ LDR x2, =_tx_timer_time_slice // Pickup address of time slice
// variable
LDR x4, [x0, #8] // Switch stack pointers
MOV sp, x4 //
@@ -233,7 +228,8 @@ _skip_solicited_fp_restore:
LDP x19, x20, [sp], #16 // Recover x19, x20
LDP x29, x30, [sp], #16 // Recover x29, x30
MSR DAIF, x4 // Recover DAIF
- RET // Return to caller
+ RET // Return to caller
/* } */
+
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_stack_build.S b/ports/cortex_a5x/ac6/src/tx_thread_stack_build.S
index ca9f34b3a..f4a0bdb57 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_stack_build.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -33,44 +34,38 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_stack_build Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_stack_build Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function builds a stack frame on the supplied thread's stack. */
/* The stack frame results in a fake interrupt return to the supplied */
-/* function pointer. */
-/* */
-/* INPUT */
-/* */
+/* function pointer. */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread control blk */
/* function_ptr Pointer to return function */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* OUTPUT */
+/* */
/* None */
-/* */
-/* CALLS */
-/* */
+/* */
+/* CALLS */
+/* */
/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* CALLED BY */
+/* */
+/* _tx_thread_create Create thread service */
/* */
/**************************************************************************/
/* VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -79,10 +74,10 @@
.type _tx_thread_stack_build, @function
_tx_thread_stack_build:
-
+
/* Build a fake interrupt frame. The form of the fake interrupt stack
on the Cortex-A5x should look like the following after it is built:
-
+
Stack Top: SSPR Initial SSPR
ELR Point of interrupt
x28 Initial value for x28
@@ -128,7 +123,7 @@ _tx_thread_stack_build:
MOV x2, #0 // Build clear value
MOV x3, #0 //
-
+
STP x2, x3, [x4, #-16]! // Set backtrace to 0
STP x2, x3, [x4, #-16]! // Set initial x29, x30
STP x2, x3, [x4, #-16]! // Set initial x0, x1
diff --git a/ports/cortex_a5x/ac6/src/tx_thread_system_return.S b/ports/cortex_a5x/ac6/src/tx_thread_system_return.S
index 45f88be6b..bc4a6306c 100644
--- a/ports/cortex_a5x/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a5x/ac6/src/tx_thread_system_return.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -34,44 +35,38 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_system_return Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_system_return Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is target processor specific. It is used to transfer */
-/* control from a thread back to the ThreadX system. Only a */
-/* minimal context is saved since the compiler assumes temp registers */
-/* are going to get slicked by a function call anyway. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_thread_schedule Thread scheduling loop */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is target processor specific. It is used to transfer */
+/* control from a thread back to the ThreadX system. Only a */
+/* minimal context is saved since the compiler assumes temp registers */
+/* are going to get slicked by a function call anyway. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_schedule Thread scheduling loop */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX components */
/* */
/**************************************************************************/
/* VOID _tx_thread_system_return(VOID)
diff --git a/ports/cortex_a5x/ac6/src/tx_timer_interrupt.S b/ports/cortex_a5x/ac6/src/tx_timer_interrupt.S
index f64521822..8d1cdf73c 100644
--- a/ports/cortex_a5x/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a5x/ac6/src/tx_timer_interrupt.S
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Timer */
/** */
@@ -32,46 +33,40 @@
.text
.align 3
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_timer_interrupt Cortex-A5x/ARM */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_timer_interrupt Cortex-A5x/ARM */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function processes the hardware timer interrupt. This */
-/* processing includes incrementing the system clock and checking for */
-/* time slice and/or timer expiration. If either is found, the */
-/* interrupt context save/restore functions are called along with the */
-/* expiration functions. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_timer_expiration_process Timer expiration processing */
-/* _tx_thread_time_slice Time slice interrupted thread */
-/* */
-/* CALLED BY */
-/* */
-/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function processes the hardware timer interrupt. This */
+/* processing includes incrementing the system clock and checking for */
+/* time slice and/or timer expiration. If either is found, the */
+/* interrupt context save/restore functions are called along with the */
+/* expiration functions. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_timer_expiration_process Timer expiration processing */
+/* _tx_thread_time_slice Time slice interrupted thread */
+/* */
+/* CALLED BY */
+/* */
+/* interrupt vector */
/* */
/**************************************************************************/
/* VOID _tx_timer_interrupt(VOID)
@@ -96,7 +91,7 @@ _tx_timer_interrupt:
/* if (_tx_timer_time_slice)
{ */
- LDR x3, =_tx_timer_time_slice // Pickup address of time-slice
+ LDR x3, =_tx_timer_time_slice // Pickup address of time-slice
LDR w2, [x3, #0] // Pickup time-slice
CMP w2, #0 // Is it non-active?
BEQ __tx_timer_no_time_slice // Yes, skip time-slice processing
@@ -213,7 +208,7 @@ __tx_timer_dont_activate:
/* if (_tx_timer_expired_time_slice)
{ */
- LDR x3, =_tx_timer_expired_time_slice // Pickup addr of time-slice expired
+ LDR x3, =_tx_timer_expired_time_slice // Pickup addr of time-slice expired
LDR w2, [x3, #0] // Pickup the actual flag
CMP w2, #0 // See if the flag is set
BEQ __tx_timer_not_ts_expiration // No, skip time-slice processing
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a65/ac6/example_build/sample_threadx/.cproject
index a74327d6d..04033b8b2 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a65/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a65/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a65/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a65/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a65/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a65/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a65/ac6/example_build/tx/.cproject b/ports/cortex_a65/ac6/example_build/tx/.cproject
index 033932c01..8d6f8851c 100644
--- a/ports/cortex_a65/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a65/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65/ac6/inc/tx_port.h b/ports/cortex_a65/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a65/ac6/inc/tx_port.h
+++ b/ports/cortex_a65/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a65/ac6/src/tx_initialize_low_level.S b/ports/cortex_a65/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a65/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a65/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_context_restore.S b/ports/cortex_a65/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_context_save.S b/ports/cortex_a65/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a65/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a65/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a65/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a65/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a65/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a65/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a65/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a65/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a65/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_schedule.S b/ports/cortex_a65/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a65/ac6/src/tx_thread_stack_build.S b/ports/cortex_a65/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a65/ac6/src/tx_thread_system_return.S b/ports/cortex_a65/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a65/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a65/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a65/ac6/src/tx_timer_interrupt.S b/ports/cortex_a65/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a65/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a65/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a65/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a65/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a65/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a65/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a65/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a65/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a65/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a65/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a65/gnu/example_build/tx/.cproject b/ports/cortex_a65/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a65/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a65/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65/gnu/inc/tx_port.h b/ports/cortex_a65/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a65/gnu/inc/tx_port.h
+++ b/ports/cortex_a65/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a65/gnu/src/tx_initialize_low_level.S b/ports/cortex_a65/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a65/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a65/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a65/gnu/src/tx_thread_context_restore.S b/ports/cortex_a65/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_context_save.S b/ports/cortex_a65/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a65/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a65/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a65/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a65/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a65/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a65/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a65/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a65/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a65/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_schedule.S b/ports/cortex_a65/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a65/gnu/src/tx_thread_stack_build.S b/ports/cortex_a65/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a65/gnu/src/tx_thread_system_return.S b/ports/cortex_a65/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a65/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a65/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a65/gnu/src/tx_timer_interrupt.S b/ports/cortex_a65/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a65/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a65/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a65ae/ac6/example_build/sample_threadx/.cproject
index d2474a550..f0ea3c701 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a65ae/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a65ae/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a65ae/ac6/example_build/tx/.cproject b/ports/cortex_a65ae/ac6/example_build/tx/.cproject
index bbfb69339..184e9a0f2 100644
--- a/ports/cortex_a65ae/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a65ae/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65ae/ac6/inc/tx_port.h b/ports/cortex_a65ae/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a65ae/ac6/inc/tx_port.h
+++ b/ports/cortex_a65ae/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a65ae/ac6/src/tx_initialize_low_level.S b/ports/cortex_a65ae/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a65ae/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a65ae/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_context_restore.S b/ports/cortex_a65ae/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_context_save.S b/ports/cortex_a65ae/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a65ae/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a65ae/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_schedule.S b/ports/cortex_a65ae/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_stack_build.S b/ports/cortex_a65ae/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_thread_system_return.S b/ports/cortex_a65ae/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a65ae/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a65ae/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a65ae/ac6/src/tx_timer_interrupt.S b/ports/cortex_a65ae/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a65ae/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a65ae/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a65ae/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a65ae/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a65ae/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a65ae/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a65ae/gnu/example_build/tx/.cproject b/ports/cortex_a65ae/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a65ae/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a65ae/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a65ae/gnu/inc/tx_port.h b/ports/cortex_a65ae/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a65ae/gnu/inc/tx_port.h
+++ b/ports/cortex_a65ae/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a65ae/gnu/src/tx_initialize_low_level.S b/ports/cortex_a65ae/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a65ae/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a65ae/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_context_restore.S b/ports/cortex_a65ae/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_context_save.S b/ports/cortex_a65ae/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a65ae/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a65ae/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_schedule.S b/ports/cortex_a65ae/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_stack_build.S b/ports/cortex_a65ae/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_thread_system_return.S b/ports/cortex_a65ae/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a65ae/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a65ae/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a65ae/gnu/src/tx_timer_interrupt.S b/ports/cortex_a65ae/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a65ae/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a65ae/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a7/ac5/example_build/sample_threadx.c b/ports/cortex_a7/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_a7/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_a7/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a7/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_a7/ac5/example_build/tx_initialize_low_level.s
index 22770ae17..49ce6c779 100644
--- a/ports/cortex_a7/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a7/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -110,45 +110,39 @@ Reset_Vector
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -199,7 +193,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -221,7 +215,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -273,7 +267,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -281,21 +275,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -305,7 +299,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -321,28 +315,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -351,7 +345,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -373,11 +367,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a7/ac5/inc/tx_port.h b/ports/cortex_a7/ac5/inc/tx_port.h
index 93e0d6884..088fc91ff 100644
--- a/ports/cortex_a7/ac5/inc/tx_port.h
+++ b/ports/cortex_a7/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A7/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A7/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
-
+
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -325,8 +317,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A7/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A7/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a7/ac5/readme_threadx.txt b/ports/cortex_a7/ac5/readme_threadx.txt
index 347a5ec97..9ebf1f2c9 100644
--- a/ports/cortex_a7/ac5/readme_threadx.txt
+++ b/ports/cortex_a7/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A7
+ Microsoft's Azure RTOS ThreadX for Cortex-A7
Thumb & 32-bit Mode
@@ -6,20 +6,20 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the AC5
-Compiler. At this point you may run the build_threadx.bat batch file. This will
-build the ThreadX run-time environment in the "example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the AC5
+Compiler. At this point you may run the build_threadx.bat batch file. This will
+build the ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -28,45 +28,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-A7 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-A7 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -82,10 +82,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -96,161 +96,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -268,39 +268,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A7 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -311,12 +311,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -324,7 +324,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,7 +337,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -347,12 +347,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -369,22 +369,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -392,10 +392,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -408,12 +408,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A7 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A7 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -422,7 +422,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -450,18 +450,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -477,7 +477,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -493,28 +493,28 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-A7 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
10. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a7/ac5/src/tx_thread_context_restore.s b/ports/cortex_a7/ac5/src/tx_thread_context_restore.s
index 6020c253e..031fe720d 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_a7/ac5/src/tx_thread_context_save.s b/ports/cortex_a7/ac5/src/tx_thread_context_save.s
index 3993d9f07..7c7be45c7 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -108,7 +102,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -124,7 +118,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -138,13 +132,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -164,7 +158,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -174,7 +168,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -189,7 +183,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a7/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_a7/ac5/src/tx_thread_fiq_context_restore.s
index 44233091f..0258ead21 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -163,7 +157,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -208,7 +202,7 @@ _tx_skip_fiq_vfp_save
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -220,7 +214,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a7/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_a7/ac5/src/tx_thread_fiq_context_save.s
index eb969c1d7..7be8a46f6 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_end.s
index 9062160c0..8b2fc70bc 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_start.s
index a1456bd16..a94ff890e 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a7/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_a7/ac5/src/tx_thread_interrupt_control.s
index 0d422e490..c9d95a58e 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a7/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_a7/ac5/src/tx_thread_interrupt_disable.s
index 5653faf4b..de174cb18 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_a7/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_a7/ac5/src/tx_thread_interrupt_restore.s
index e9f15cc6a..c2c328425 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_end.s
index f458cb211..73a88636b 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_start.s
index 2f1814f8b..d4c1ca063 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a7/ac5/src/tx_thread_schedule.s b/ports/cortex_a7/ac5/src/tx_thread_schedule.s
index 0f10a5375..5506bcf4c 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +41,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +102,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -233,3 +228,4 @@ __tx_no_thread_to_disable
END
+
diff --git a/ports/cortex_a7/ac5/src/tx_thread_stack_build.s b/ports/cortex_a7/ac5/src/tx_thread_stack_build.s
index a868d826a..f89d73a66 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A7 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a7/ac5/src/tx_thread_system_return.s b/ports/cortex_a7/ac5/src/tx_thread_system_return.s
index 01e934359..cfaf4f840 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -104,7 +98,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
IF :DEF:TX_ENABLE_FIQ_SUPPORT
diff --git a/ports/cortex_a7/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_a7/ac5/src/tx_thread_vectored_context_save.s
index 1e9a2f82e..d52a97769 100644
--- a/ports/cortex_a7/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a7/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a7/ac5/src/tx_timer_interrupt.s b/ports/cortex_a7/ac5/src/tx_timer_interrupt.s
index ce94e6e0f..0a2a68f61 100644
--- a/ports/cortex_a7/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_a7/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A7/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A7/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a7/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a7/ac6/example_build/sample_threadx/.cproject
index e75dac72f..c34527a9b 100644
--- a/ports/cortex_a7/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a7/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a7/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a7/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a7/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a7/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a7/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a7/ac6/example_build/tx/.cproject b/ports/cortex_a7/ac6/example_build/tx/.cproject
index 476321bbd..f17f3f56d 100644
--- a/ports/cortex_a7/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a7/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a7/ac6/inc/tx_port.h b/ports/cortex_a7/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a7/ac6/inc/tx_port.h
+++ b/ports/cortex_a7/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a7/ac6/readme_threadx.txt b/ports/cortex_a7/ac6/readme_threadx.txt
index b9d6bf88a..a18fa47da 100644
--- a/ports/cortex_a7/ac6/readme_threadx.txt
+++ b/ports/cortex_a7/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A7
+ Microsoft's Azure RTOS ThreadX for Cortex-A7
Using ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -22,44 +22,44 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
VE_Cortex-A7 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-a7_tx.launch' file, click
'Debug As', and then click 'cortex-a7_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A7 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A7 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -77,52 +77,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A7 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -130,7 +130,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -143,7 +143,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -153,12 +153,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -175,22 +175,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -198,10 +198,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -214,12 +214,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -228,7 +228,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -256,18 +256,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -283,7 +283,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -299,12 +299,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -312,7 +312,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a7/ac6/src/tx_thread_context_restore.S b/ports/cortex_a7/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a7/ac6/src/tx_thread_context_save.S b/ports/cortex_a7/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a7/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a7/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a7/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a7/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a7/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a7/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a7/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_schedule.S b/ports/cortex_a7/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a7/ac6/src/tx_thread_stack_build.S b/ports/cortex_a7/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_system_return.S b/ports/cortex_a7/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a7/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a7/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a7/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a7/ac6/src/tx_timer_interrupt.S b/ports/cortex_a7/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a7/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a7/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_a7/ghs/example_build/tx_initialize_low_level.arm
index 0d10366bd..b4d024bf3 100644
--- a/ports/cortex_a7/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_a7/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/inc/tx_el.h b/ports/cortex_a7/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_a7/ghs/inc/tx_el.h
+++ b/ports/cortex_a7/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_a7/ghs/inc/tx_port.h b/ports/cortex_a7/ghs/inc/tx_port.h
index f0f1e2c7c..7fa32537a 100644
--- a/ports/cortex_a7/ghs/inc/tx_port.h
+++ b/ports/cortex_a7/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A7/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A7/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a7/ghs/readme_threadx.txt b/ports/cortex_a7/ghs/readme_threadx.txt
index 3195b4e4a..d7472f9e4 100644
--- a/ports/cortex_a7/ghs/readme_threadx.txt
+++ b/ports/cortex_a7/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A7
+ Microsoft's Azure RTOS ThreadX for Cortex-A7
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-A7 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-A7 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-A7 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-A7 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-A7 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-A7 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-A7 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -520,7 +520,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-A7/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-A7/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_a7/ghs/src/tx_el.c b/ports/cortex_a7/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_a7/ghs/src/tx_el.c
+++ b/ports/cortex_a7/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_a7/ghs/src/tx_thread_context_restore.arm b/ports/cortex_a7/ghs/src/tx_thread_context_restore.arm
index fa173d80c..91af88261 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_context_save.arm b/ports/cortex_a7/ghs/src/tx_thread_context_save.arm
index f1608b926..d97524521 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_a7/ghs/src/tx_thread_fiq_context_restore.arm
index 60c4e5fe2..115e8d66a 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_a7/ghs/src/tx_thread_fiq_context_save.arm
index 75182da9f..c2123b803 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_end.arm
index d68988218..16f824950 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_start.arm
index 5f99bae6d..af4dcd16f 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_a7/ghs/src/tx_thread_interrupt_control.arm
index d2ec35c71..e492cd804 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_a7/ghs/src/tx_thread_interrupt_disable.arm
index 36702beb8..f12583d21 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_a7/ghs/src/tx_thread_interrupt_restore.arm
index aec3e0a2b..bb8daa6cd 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_end.arm
index b5e7be093..3d35ef545 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_start.arm
index 772ce8709..f8ff6e7f0 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_schedule.arm b/ports/cortex_a7/ghs/src/tx_thread_schedule.arm
index 315c1f22a..037e259e7 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_stack_build.arm b/ports/cortex_a7/ghs/src/tx_thread_stack_build.arm
index d1552846b..2e07532a7 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_system_return.arm b/ports/cortex_a7/ghs/src/tx_thread_system_return.arm
index ec6e3a5e9..ff6e8512c 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_a7/ghs/src/tx_thread_vectored_context_save.arm
index dff3ef5cf..4433de475 100644
--- a/ports/cortex_a7/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_a7/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/ghs/src/tx_timer_interrupt.arm b/ports/cortex_a7/ghs/src/tx_timer_interrupt.arm
index 66e4639aa..96753ba91 100644
--- a/ports/cortex_a7/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_a7/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/gnu/example_build/MP_GIC.h b/ports/cortex_a7/gnu/example_build/MP_GIC.h
index c34e44c94..05c0f8a53 100644
--- a/ports/cortex_a7/gnu/example_build/MP_GIC.h
+++ b/ports/cortex_a7/gnu/example_build/MP_GIC.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a7/gnu/example_build/MP_GIC.s b/ports/cortex_a7/gnu/example_build/MP_GIC.s
index 7f175c69b..6f093bd74 100644
--- a/ports/cortex_a7/gnu/example_build/MP_GIC.s
+++ b/ports/cortex_a7/gnu/example_build/MP_GIC.s
@@ -1,7 +1,7 @@
//----------------------------------------------------------------
// Copyright (c) 2005-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
// Cortex-A7MP example - Startup Code
@@ -37,7 +37,7 @@ enableGIC:
STR r1, [r0] // Write the GIC Enable Register (ICDDCR)
BX lr
-
+
// ------------------------------------------------------------
.global disableGIC
@@ -54,7 +54,7 @@ disableGIC:
STR r1, [r0] // Write the GIC Enable Register (ICDDCR)
BX lr
-
+
// ------------------------------------------------------------
@@ -84,10 +84,10 @@ enableIntID:
STR r3, [r0, r2] // Store out (ICDISER)
BX lr
-
+
// ------------------------------------------------------------
-
+
.global disableIntID
.type disableIntID,function
// void disableIntID(unsigned int ID)
@@ -112,7 +112,7 @@ disableIntID:
STR r3, [r0, r2] // Store out (ICDICER)
BX lr
-
+
// ------------------------------------------------------------
@@ -130,7 +130,7 @@ setIntPriority:
// r0 = base addr
// r1 = priority
// r2 = ID
-
+
// Make sure that priority value is only 5 bits, and convert to expected format
AND r1, r1, #0x1F
MOV r1, r1, LSL #3
@@ -156,7 +156,7 @@ setIntPriority:
STR r3, [r0] // And store it back again (ICDIPR)
BX lr
-
+
// ------------------------------------------------------------
@@ -175,7 +175,7 @@ enableGICProcessorInterface:
STR r1, [r0, #0x0] // Write the Processor Interface Control register (ICCICR/ICPICR)
BX lr
-
+
// ------------------------------------------------------------
@@ -195,7 +195,7 @@ disableGICProcessorInterface:
STR r1, [r0, #0x0] // Write the Processor Interface Control register (ICCICR/ICPICR)
BX lr
-
+
// ------------------------------------------------------------
@@ -214,8 +214,8 @@ setPriorityMask:
STR r0, [r1, #0x4] // Write the Priority Mask register (ICCPMR/ICCIPMR)
BX lr
-
-
+
+
// ------------------------------------------------------------
.global setBinaryPoint
@@ -231,7 +231,7 @@ setBinaryPoint:
STR r0, [r1, #0x8] // Write the Binary register (ICCBPR/ICCBPR)
BX lr
-
+
// ------------------------------------------------------------
@@ -245,7 +245,7 @@ readIntAck:
LDR r0, [r0, #0xC] // Read the Interrupt Acknowledge Register (ICCIAR)
BX lr
-
+
// ------------------------------------------------------------
@@ -262,8 +262,8 @@ writeEOI:
STR r0, [r1, #0x10] // Write ID to the End of Interrupt register (ICCEOIR)
BX lr
-
-
+
+
//----------------------------------------------------------------
// SGI
//----------------------------------------------------------------
diff --git a/ports/cortex_a7/gnu/example_build/MP_PrivateTimer.S b/ports/cortex_a7/gnu/example_build/MP_PrivateTimer.S
index b1e2701bb..7b83be9eb 100644
--- a/ports/cortex_a7/gnu/example_build/MP_PrivateTimer.S
+++ b/ports/cortex_a7/gnu/example_build/MP_PrivateTimer.S
@@ -64,7 +64,7 @@ stop_private_timer:
get_private_timer_count:
BX lr
-
+
// ------------------------------------------------------------
// void clear_private_timer_irq(void)
diff --git a/ports/cortex_a7/gnu/example_build/reset.S b/ports/cortex_a7/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a7/gnu/example_build/reset.S
+++ b/ports/cortex_a7/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a7/gnu/example_build/sample_threadx.ld b/ports/cortex_a7/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a7/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a7/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S
index c5337622f..9b49da8bb 100644
--- a/ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -89,17 +90,6 @@ SYS_STACK_SIZE = 1024 // System stack size
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -249,7 +239,7 @@ __tx_irq_processing_return:
if nested IRQ interrupts are desired. Interrupts may be re-enabled over
small code sequences where lr is saved before enabling interrupts and
restored after interrupts are again disabled. */
-
+
PUSH {r4, r5} // Save some preserved registers (r5 is saved just for 8-byte alignment)
BL readIntAck
MOV r4, r0
diff --git a/ports/cortex_a7/gnu/example_build/v7.h b/ports/cortex_a7/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a7/gnu/example_build/v7.h
+++ b/ports/cortex_a7/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a7/gnu/example_build/v7.s b/ports/cortex_a7/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a7/gnu/example_build/v7.s
+++ b/ports/cortex_a7/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a7/gnu/inc/tx_port.h b/ports/cortex_a7/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a7/gnu/inc/tx_port.h
+++ b/ports/cortex_a7/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a7/gnu/readme_threadx.txt b/ports/cortex_a7/gnu/readme_threadx.txt
index 446d6bcf4..32ab1df3a 100644
--- a/ports/cortex_a7/gnu/readme_threadx.txt
+++ b/ports/cortex_a7/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A7
+ Microsoft's Azure RTOS ThreadX for Cortex-A7
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-A7 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-A7 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A7 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -483,7 +483,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a7/gnu/src/tx_thread_context_restore.S b/ports/cortex_a7/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a7/gnu/src/tx_thread_context_save.S b/ports/cortex_a7/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a7/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a7/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a7/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a7/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a7/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a7/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a7/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_schedule.S b/ports/cortex_a7/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a7/gnu/src/tx_thread_stack_build.S b/ports/cortex_a7/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_system_return.S b/ports/cortex_a7/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a7/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a7/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a7/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a7/gnu/src/tx_timer_interrupt.S b/ports/cortex_a7/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a7/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a7/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a7/iar/example_build/cstartup.s b/ports/cortex_a7/iar/example_build/cstartup.s
index 647de2e8e..b4ed8f87f 100644
--- a/ports/cortex_a7/iar/example_build/cstartup.s
+++ b/ports/cortex_a7/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/cortex_a7/iar/example_build/sample_threadx.c b/ports/cortex_a7/iar/example_build/sample_threadx.c
index c2cc9886d..02183317e 100644
--- a/ports/cortex_a7/iar/example_build/sample_threadx.c
+++ b/ports/cortex_a7/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a7/iar/example_build/tx_initialize_low_level.s b/ports/cortex_a7/iar/example_build/tx_initialize_low_level.s
index c30a14aaf..6252bba47 100644
--- a/ports/cortex_a7/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a7/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,45 +75,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a7/iar/inc/tx_port.h b/ports/cortex_a7/iar/inc/tx_port.h
index 48f211d8b..90477b762 100644
--- a/ports/cortex_a7/iar/inc/tx_port.h
+++ b/ports/cortex_a7/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A7/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A7/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -188,7 +180,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -202,18 +194,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -227,11 +219,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -241,23 +233,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -285,8 +277,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -297,22 +289,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -381,8 +373,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A7/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A7/IAR Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a7/iar/readme_threadx.txt b/ports/cortex_a7/iar/readme_threadx.txt
index 7f16ed211..504b26ede 100644
--- a/ports/cortex_a7/iar/readme_threadx.txt
+++ b/ports/cortex_a7/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A7
+ Microsoft's Azure RTOS ThreadX for Cortex-A7
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-A7 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-A7 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-A7 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-A7 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,146 +92,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -245,29 +245,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A7 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -278,12 +278,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -291,7 +291,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -304,7 +304,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -315,12 +315,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,24 +337,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -362,15 +362,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -378,7 +378,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -389,12 +389,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A7 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A7 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -403,7 +403,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -434,18 +434,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -463,7 +463,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -479,22 +479,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-A7 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A7 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -506,14 +506,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a7/iar/src/tx_iar.c b/ports/cortex_a7/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_a7/iar/src/tx_iar.c
+++ b/ports/cortex_a7/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_a7/iar/src/tx_thread_context_restore.s b/ports/cortex_a7/iar/src/tx_thread_context_restore.s
index 0b3814a8a..bf2238dbb 100644
--- a/ports/cortex_a7/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_a7/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,7 +36,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -51,47 +51,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +112,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -193,7 +184,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
@@ -204,7 +195,7 @@ __tx_thread_preempt_restore
VSTMDB sp!, {D0-D15} ; Save D0-D15
_tx_skip_fiq_vfp_save:
#endif
-
+
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
diff --git a/ports/cortex_a7/iar/src/tx_thread_context_save.s b/ports/cortex_a7/iar/src/tx_thread_context_save.s
index dfbe7b7b2..845284d2e 100644
--- a/ports/cortex_a7/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_a7/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,46 +43,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -99,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -119,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -135,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -149,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -175,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -185,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -200,7 +191,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a7/iar/src/tx_thread_fiq_context_restore.s b/ports/cortex_a7/iar/src/tx_thread_fiq_context_restore.s
index af8f462b4..3e62e30ab 100644
--- a/ports/cortex_a7/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a7/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,47 +52,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +113,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +163,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -232,7 +223,7 @@ _tx_skip_irq_vfp_save:
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a7/iar/src/tx_thread_fiq_context_save.s b/ports/cortex_a7/iar/src/tx_thread_fiq_context_save.s
index e43fdf76b..e34824b15 100644
--- a/ports/cortex_a7/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a7/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -107,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -123,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -167,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -187,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_end.s
index 155a79b6f..69d252bde 100644
--- a/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,55 +34,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
diff --git a/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_start.s
index 8b82e8eb7..3a6ebbc7e 100644
--- a/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a7/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a7/iar/src/tx_thread_interrupt_control.s b/ports/cortex_a7/iar/src/tx_thread_interrupt_control.s
index e4618a599..37aabfe1b 100644
--- a/ports/cortex_a7/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a7/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,42 +35,36 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a7/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_a7/iar/src/tx_thread_interrupt_disable.s
index 43c7952d0..d35bdb1ba 100644
--- a/ports/cortex_a7/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a7/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_a7/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_a7/iar/src/tx_thread_interrupt_restore.s
index 1893ce179..e3f63d526 100644
--- a/ports/cortex_a7/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a7/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a7/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_a7/iar/src/tx_thread_irq_nesting_end.s
index 5de63f0d2..525c310d1 100644
--- a/ports/cortex_a7/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a7/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,55 +35,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_a7/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_a7/iar/src/tx_thread_irq_nesting_start.s
index bf465f81e..0e27b0604 100644
--- a/ports/cortex_a7/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a7/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a7/iar/src/tx_thread_schedule.s b/ports/cortex_a7/iar/src/tx_thread_schedule.s
index 985da38e2..f0f0bf5bd 100644
--- a/ports/cortex_a7/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_a7/iar/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,48 +44,39 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -114,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -123,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -137,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -198,7 +190,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -218,7 +210,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -239,3 +231,4 @@ __tx_no_thread_to_disable:
END
+
diff --git a/ports/cortex_a7/iar/src/tx_thread_stack_build.s b/ports/cortex_a7/iar/src/tx_thread_stack_build.s
index fc4e58705..306dc03fb 100644
--- a/ports/cortex_a7/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_a7/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A7 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a7/iar/src/tx_thread_system_return.s b/ports/cortex_a7/iar/src/tx_thread_system_return.s
index c35bc5f61..3bc43a36f 100644
--- a/ports/cortex_a7/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_a7/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,47 +42,38 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -113,7 +104,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/cortex_a7/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_a7/iar/src/tx_thread_vectored_context_save.s
index da8794f77..9427f0a26 100644
--- a/ports/cortex_a7/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a7/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,46 +41,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A7/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -142,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -174,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a7/iar/src/tx_timer_interrupt.s b/ports/cortex_a7/iar/src/tx_timer_interrupt.s
index da4b2f3f2..00ecfc463 100644
--- a/ports/cortex_a7/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_a7/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A7/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A7/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a72/ac6/example_build/sample_threadx/.cproject
index 1f6965bfe..d67ddd584 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a72/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a72/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a72/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a72/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a72/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a72/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a72/ac6/example_build/tx/.cproject b/ports/cortex_a72/ac6/example_build/tx/.cproject
index 10cb82e17..e0dba8930 100644
--- a/ports/cortex_a72/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a72/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a72/ac6/inc/tx_port.h b/ports/cortex_a72/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a72/ac6/inc/tx_port.h
+++ b/ports/cortex_a72/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a72/ac6/src/tx_initialize_low_level.S b/ports/cortex_a72/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a72/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a72/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_context_restore.S b/ports/cortex_a72/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_context_save.S b/ports/cortex_a72/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a72/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a72/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a72/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a72/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a72/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a72/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a72/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a72/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a72/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_schedule.S b/ports/cortex_a72/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a72/ac6/src/tx_thread_stack_build.S b/ports/cortex_a72/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a72/ac6/src/tx_thread_system_return.S b/ports/cortex_a72/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a72/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a72/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a72/ac6/src/tx_timer_interrupt.S b/ports/cortex_a72/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a72/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a72/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a72/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a72/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a72/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a72/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a72/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a72/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a72/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a72/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a72/gnu/example_build/tx/.cproject b/ports/cortex_a72/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a72/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a72/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a72/gnu/inc/tx_port.h b/ports/cortex_a72/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a72/gnu/inc/tx_port.h
+++ b/ports/cortex_a72/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a72/gnu/src/tx_initialize_low_level.S b/ports/cortex_a72/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a72/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a72/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a72/gnu/src/tx_thread_context_restore.S b/ports/cortex_a72/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_context_save.S b/ports/cortex_a72/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a72/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a72/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a72/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a72/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a72/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a72/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a72/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a72/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a72/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_schedule.S b/ports/cortex_a72/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a72/gnu/src/tx_thread_stack_build.S b/ports/cortex_a72/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a72/gnu/src/tx_thread_system_return.S b/ports/cortex_a72/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a72/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a72/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a72/gnu/src/tx_timer_interrupt.S b/ports/cortex_a72/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a72/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a72/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a73/ac6/example_build/sample_threadx/.cproject
index 2d2e59d76..2280a7dd2 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a73/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a73/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a73/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a73/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a73/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a73/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a73/ac6/example_build/tx/.cproject b/ports/cortex_a73/ac6/example_build/tx/.cproject
index 1b43e008f..2409ff43e 100644
--- a/ports/cortex_a73/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a73/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a73/ac6/inc/tx_port.h b/ports/cortex_a73/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a73/ac6/inc/tx_port.h
+++ b/ports/cortex_a73/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a73/ac6/src/tx_initialize_low_level.S b/ports/cortex_a73/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a73/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a73/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_context_restore.S b/ports/cortex_a73/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_context_save.S b/ports/cortex_a73/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a73/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a73/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a73/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a73/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a73/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a73/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a73/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a73/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a73/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_schedule.S b/ports/cortex_a73/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a73/ac6/src/tx_thread_stack_build.S b/ports/cortex_a73/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a73/ac6/src/tx_thread_system_return.S b/ports/cortex_a73/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a73/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a73/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a73/ac6/src/tx_timer_interrupt.S b/ports/cortex_a73/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a73/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a73/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a73/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a73/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a73/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a73/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a73/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a73/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a73/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a73/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a73/gnu/example_build/tx/.cproject b/ports/cortex_a73/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a73/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a73/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a73/gnu/inc/tx_port.h b/ports/cortex_a73/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a73/gnu/inc/tx_port.h
+++ b/ports/cortex_a73/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a73/gnu/src/tx_initialize_low_level.S b/ports/cortex_a73/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a73/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a73/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a73/gnu/src/tx_thread_context_restore.S b/ports/cortex_a73/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_context_save.S b/ports/cortex_a73/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a73/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a73/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a73/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a73/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a73/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a73/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a73/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a73/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a73/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_schedule.S b/ports/cortex_a73/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a73/gnu/src/tx_thread_stack_build.S b/ports/cortex_a73/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a73/gnu/src/tx_thread_system_return.S b/ports/cortex_a73/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a73/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a73/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a73/gnu/src/tx_timer_interrupt.S b/ports/cortex_a73/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a73/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a73/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a75/ac6/example_build/sample_threadx/.cproject
index b8d51c268..fdf1a4fae 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a75/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a75/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a75/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a75/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a75/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a75/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a75/ac6/example_build/tx/.cproject b/ports/cortex_a75/ac6/example_build/tx/.cproject
index e9bbc8ae1..55b898b34 100644
--- a/ports/cortex_a75/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a75/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a75/ac6/inc/tx_port.h b/ports/cortex_a75/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a75/ac6/inc/tx_port.h
+++ b/ports/cortex_a75/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a75/ac6/src/tx_initialize_low_level.S b/ports/cortex_a75/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a75/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a75/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_context_restore.S b/ports/cortex_a75/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_context_save.S b/ports/cortex_a75/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a75/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a75/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a75/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a75/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a75/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a75/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a75/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a75/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a75/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_schedule.S b/ports/cortex_a75/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a75/ac6/src/tx_thread_stack_build.S b/ports/cortex_a75/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a75/ac6/src/tx_thread_system_return.S b/ports/cortex_a75/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a75/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a75/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a75/ac6/src/tx_timer_interrupt.S b/ports/cortex_a75/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a75/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a75/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a75/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a75/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a75/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a75/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a75/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a75/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a75/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a75/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a75/gnu/example_build/tx/.cproject b/ports/cortex_a75/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a75/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a75/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a75/gnu/inc/tx_port.h b/ports/cortex_a75/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a75/gnu/inc/tx_port.h
+++ b/ports/cortex_a75/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a75/gnu/src/tx_initialize_low_level.S b/ports/cortex_a75/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a75/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a75/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a75/gnu/src/tx_thread_context_restore.S b/ports/cortex_a75/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_context_save.S b/ports/cortex_a75/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a75/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a75/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a75/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a75/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a75/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a75/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a75/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a75/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a75/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_schedule.S b/ports/cortex_a75/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a75/gnu/src/tx_thread_stack_build.S b/ports/cortex_a75/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a75/gnu/src/tx_thread_system_return.S b/ports/cortex_a75/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a75/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a75/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a75/gnu/src/tx_timer_interrupt.S b/ports/cortex_a75/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a75/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a75/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a76/ac6/example_build/sample_threadx/.cproject
index 710476e95..0de7cf84a 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a76/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a76/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a76/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a76/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a76/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a76/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a76/ac6/example_build/tx/.cproject b/ports/cortex_a76/ac6/example_build/tx/.cproject
index 8f5835ec9..feedcae1f 100644
--- a/ports/cortex_a76/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a76/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76/ac6/inc/tx_port.h b/ports/cortex_a76/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a76/ac6/inc/tx_port.h
+++ b/ports/cortex_a76/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a76/ac6/src/tx_initialize_low_level.S b/ports/cortex_a76/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a76/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a76/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_context_restore.S b/ports/cortex_a76/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_context_save.S b/ports/cortex_a76/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a76/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a76/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a76/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a76/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a76/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a76/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a76/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a76/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a76/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_schedule.S b/ports/cortex_a76/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a76/ac6/src/tx_thread_stack_build.S b/ports/cortex_a76/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a76/ac6/src/tx_thread_system_return.S b/ports/cortex_a76/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a76/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a76/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a76/ac6/src/tx_timer_interrupt.S b/ports/cortex_a76/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a76/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a76/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a76/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a76/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a76/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a76/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a76/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a76/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a76/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a76/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a76/gnu/example_build/tx/.cproject b/ports/cortex_a76/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a76/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a76/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76/gnu/inc/tx_port.h b/ports/cortex_a76/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a76/gnu/inc/tx_port.h
+++ b/ports/cortex_a76/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a76/gnu/src/tx_initialize_low_level.S b/ports/cortex_a76/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a76/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a76/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a76/gnu/src/tx_thread_context_restore.S b/ports/cortex_a76/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_context_save.S b/ports/cortex_a76/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a76/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a76/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a76/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a76/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a76/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a76/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a76/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a76/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a76/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_schedule.S b/ports/cortex_a76/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a76/gnu/src/tx_thread_stack_build.S b/ports/cortex_a76/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a76/gnu/src/tx_thread_system_return.S b/ports/cortex_a76/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a76/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a76/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a76/gnu/src/tx_timer_interrupt.S b/ports/cortex_a76/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a76/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a76/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a76ae/ac6/example_build/sample_threadx/.cproject
index 7d1777954..e4ad93db5 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a76ae/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a76ae/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a76ae/ac6/example_build/tx/.cproject b/ports/cortex_a76ae/ac6/example_build/tx/.cproject
index e51aafe27..9f404004b 100644
--- a/ports/cortex_a76ae/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a76ae/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76ae/ac6/inc/tx_port.h b/ports/cortex_a76ae/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a76ae/ac6/inc/tx_port.h
+++ b/ports/cortex_a76ae/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a76ae/ac6/src/tx_initialize_low_level.S b/ports/cortex_a76ae/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a76ae/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a76ae/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_context_restore.S b/ports/cortex_a76ae/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_context_save.S b/ports/cortex_a76ae/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a76ae/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a76ae/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_schedule.S b/ports/cortex_a76ae/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_stack_build.S b/ports/cortex_a76ae/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_thread_system_return.S b/ports/cortex_a76ae/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a76ae/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a76ae/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a76ae/ac6/src/tx_timer_interrupt.S b/ports/cortex_a76ae/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a76ae/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a76ae/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a76ae/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a76ae/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a76ae/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a76ae/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a76ae/gnu/example_build/tx/.cproject b/ports/cortex_a76ae/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a76ae/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a76ae/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a76ae/gnu/inc/tx_port.h b/ports/cortex_a76ae/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a76ae/gnu/inc/tx_port.h
+++ b/ports/cortex_a76ae/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a76ae/gnu/src/tx_initialize_low_level.S b/ports/cortex_a76ae/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a76ae/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a76ae/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_context_restore.S b/ports/cortex_a76ae/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_context_save.S b/ports/cortex_a76ae/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a76ae/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a76ae/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_schedule.S b/ports/cortex_a76ae/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_stack_build.S b/ports/cortex_a76ae/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_thread_system_return.S b/ports/cortex_a76ae/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a76ae/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a76ae/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a76ae/gnu/src/tx_timer_interrupt.S b/ports/cortex_a76ae/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a76ae/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a76ae/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a77/ac6/example_build/sample_threadx/.cproject
index c6e9771fc..f097ca783 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a77/ac6/example_build/sample_threadx/sample_threadx.scat
index e5783c7c3..d8dfde69e 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -2,7 +2,7 @@
; Scatter file for Armv8-A Startup code on FVP Base model
; Copyright (c) 2014-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;********************************************************
@@ -25,7 +25,7 @@ LOAD 0x80000000
; in source code for this to work correctly
;
ARM_LIB_HEAP +0 ALIGN 64 EMPTY 0xA0000 {}
-
+
;
; Handler stacks for all CPUs
; All stacks and heap are aligned to a cache-line boundary
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a77/ac6/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a77/ac6/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a77/ac6/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a77/ac6/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a77/ac6/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a77/ac6/example_build/tx/.cproject b/ports/cortex_a77/ac6/example_build/tx/.cproject
index 137a756a1..4b3c562bf 100644
--- a/ports/cortex_a77/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a77/ac6/example_build/tx/.cproject
@@ -1,148 +1,148 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a77/ac6/inc/tx_port.h b/ports/cortex_a77/ac6/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a77/ac6/inc/tx_port.h
+++ b/ports/cortex_a77/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a77/ac6/src/tx_initialize_low_level.S b/ports/cortex_a77/ac6/src/tx_initialize_low_level.S
index f456574e9..7d2a4be31 100644
--- a/ports/cortex_a77/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_a77/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_context_restore.S b/ports/cortex_a77/ac6/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_context_save.S b/ports/cortex_a77/ac6/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_fp_disable.c b/ports/cortex_a77/ac6/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a77/ac6/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a77/ac6/src/tx_thread_fp_enable.c b/ports/cortex_a77/ac6/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a77/ac6/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a77/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a77/ac6/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a77/ac6/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a77/ac6/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_schedule.S b/ports/cortex_a77/ac6/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a77/ac6/src/tx_thread_stack_build.S b/ports/cortex_a77/ac6/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a77/ac6/src/tx_thread_system_return.S b/ports/cortex_a77/ac6/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a77/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a77/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a77/ac6/src/tx_timer_interrupt.S b/ports/cortex_a77/ac6/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a77/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a77/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/.cproject b/ports/cortex_a77/gnu/example_build/sample_threadx/.cproject
index 1c32cb32c..40d4912d3 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.S b/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.S
index c787c3f58..e8a87f0b3 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.S
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.S
@@ -92,7 +92,7 @@ _mutex_release:
.type _mutex_acquire, "function"
.cfi_startproc
_mutex_acquire:
- // This uses a "ticket lock". The lock is stored as a 32-bit value:
+ // This uses a "ticket lock". The lock is stored as a 32-bit value:
// - the upper 16-bits record the thread's ticket number ("take a ticket")
// - the lower 16-bits record the ticket being served ("now serving")
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.h b/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.h
index ec1a1d283..00e9cd60b 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.h
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/MP_Mutexes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
#ifndef MP_MUTEX_H
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/sample_threadx.ld b/ports/cortex_a77/gnu/example_build/sample_threadx/sample_threadx.ld
index eec8f12b6..3bf477364 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/sample_threadx.ld
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/sample_threadx.ld
@@ -1,7 +1,7 @@
/* Linker script to place sections and symbol values.
* It references following symbols, which must be defined in code:
* start64 : Entry point
- *
+ *
* It defines following symbols, which code can use without definition:
* __cs3_peripherals
* __code_start
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/startup.S b/ports/cortex_a77/gnu/example_build/sample_threadx/startup.S
index b71b45f8a..b44806feb 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/startup.S
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/startup.S
@@ -328,7 +328,7 @@ el1_entry_aarch64:
//
// Cortex-A processors automatically invalidate their caches on reset
// (unless suppressed with the DBGL1RSTDISABLE or L2RSTDISABLE pins).
- // It is therefore not necessary for software to invalidate the caches
+ // It is therefore not necessary for software to invalidate the caches
// on startup, however, this is done here in case of a warm reset.
bl InvalidateUDCaches
tlbi VMALLE1
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/v8_aarch64.h b/ports/cortex_a77/gnu/example_build/sample_threadx/v8_aarch64.h
index b09079a46..91ca96530 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/v8_aarch64.h
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/v8_aarch64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2012-2014 Arm Limited (or its affiliates). All rights reserved.
* Use, modification and redistribution of this file is subject to your possession of a
- * valid End User License Agreement for the Arm Product of which these examples are part of
+ * valid End User License Agreement for the Arm Product of which these examples are part of
* and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_a77/gnu/example_build/sample_threadx/v8_mmu.h b/ports/cortex_a77/gnu/example_build/sample_threadx/v8_mmu.h
index bce62b541..d0c516013 100644
--- a/ports/cortex_a77/gnu/example_build/sample_threadx/v8_mmu.h
+++ b/ports/cortex_a77/gnu/example_build/sample_threadx/v8_mmu.h
@@ -101,7 +101,7 @@
#define TT_S1_ATTR_PXN (1 << 53)
#define TT_S1_ATTR_UXN (1 << 54)
-// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
+// PBHA bits[62:59] - If Armv8.2-TTPBHA is implemented, hardware can use these bits
// for IMPLEMENTATIONDEFINED purposes, otherwise IGNORED
#define TT_S1_MAIR_DEV_nGnRnE 0b00000000
diff --git a/ports/cortex_a77/gnu/example_build/tx/.cproject b/ports/cortex_a77/gnu/example_build/tx/.cproject
index f1b8ed5b3..9e5a975ed 100644
--- a/ports/cortex_a77/gnu/example_build/tx/.cproject
+++ b/ports/cortex_a77/gnu/example_build/tx/.cproject
@@ -1,164 +1,164 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a77/gnu/inc/tx_port.h b/ports/cortex_a77/gnu/inc/tx_port.h
index a8d3fd48d..e53523382 100644
--- a/ports/cortex_a77/gnu/inc/tx_port.h
+++ b/ports/cortex_a77/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -369,7 +361,7 @@ VOID tx_thread_fp_disable(VOID);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv8-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv8-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a77/gnu/src/tx_initialize_low_level.S b/ports/cortex_a77/gnu/src/tx_initialize_low_level.S
index 3dce3cea0..3025f12bc 100644
--- a/ports/cortex_a77/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_a77/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,17 +59,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -99,4 +89,4 @@ _tx_initialize_low_level:
/* Done, return to caller. */
RET // Return to caller
-// }
+// }
diff --git a/ports/cortex_a77/gnu/src/tx_thread_context_restore.S b/ports/cortex_a77/gnu/src/tx_thread_context_restore.S
index 8e0d55158..9ba82827f 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_context_save.S b/ports/cortex_a77/gnu/src/tx_thread_context_save.S
index 7768efc27..c23951557 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_fp_disable.c b/ports/cortex_a77/gnu/src/tx_thread_fp_disable.c
index aa175e832..25233f776 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_fp_disable.c
+++ b/ports/cortex_a77/gnu/src/tx_thread_fp_disable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,14 +59,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_disable(VOID)
{
diff --git a/ports/cortex_a77/gnu/src/tx_thread_fp_enable.c b/ports/cortex_a77/gnu/src/tx_thread_fp_enable.c
index 341bb200e..7351aee4c 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_fp_enable.c
+++ b/ports/cortex_a77/gnu/src/tx_thread_fp_enable.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
VOID _tx_thread_fp_enable(VOID)
{
diff --git a/ports/cortex_a77/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a77/gnu/src/tx_thread_interrupt_control.S
index d8e70ebb4..21ec2dd17 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a77/gnu/src/tx_thread_interrupt_disable.S
index e398d46a8..af2ef874e 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(void)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a77/gnu/src/tx_thread_interrupt_restore.S
index 7b55fb9f2..3e0780d09 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,17 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_restore(UINT old_posture)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_schedule.S b/ports/cortex_a77/gnu/src/tx_thread_schedule.S
index 009a0d5be..057aa5385 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -58,18 +59,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* added ARMv8.2-A support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -230,3 +219,4 @@ _skip_solicited_fp_restore:
MSR DAIF, x4 // Recover DAIF
RET // Return to caller
// }
+
diff --git a/ports/cortex_a77/gnu/src/tx_thread_stack_build.S b/ports/cortex_a77/gnu/src/tx_thread_stack_build.S
index 6c675d9b5..01084da78 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,17 +58,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Andres Mlinar Updated comments, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_a77/gnu/src/tx_thread_system_return.S b/ports/cortex_a77/gnu/src/tx_thread_system_return.S
index 780bb1283..b7593d793 100644
--- a/ports/cortex_a77/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a77/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_a77/gnu/src/tx_timer_interrupt.S b/ports/cortex_a77/gnu/src/tx_timer_interrupt.S
index d84245c67..1b80a7f2e 100644
--- a/ports/cortex_a77/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a77/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_a8/ac5/example_build/sample_threadx.c b/ports/cortex_a8/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_a8/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_a8/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a8/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_a8/ac5/example_build/tx_initialize_low_level.s
index ddf3e8bb6..89fec36ba 100644
--- a/ports/cortex_a8/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a8/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -90,45 +90,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -179,7 +173,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -201,7 +195,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -253,7 +247,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -261,21 +255,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -285,7 +279,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -301,28 +295,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -331,7 +325,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -353,11 +347,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a8/ac5/inc/tx_port.h b/ports/cortex_a8/ac5/inc/tx_port.h
index 69e14287e..7dc9a5221 100644
--- a/ports/cortex_a8/ac5/inc/tx_port.h
+++ b/ports/cortex_a8/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A8/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A8/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
-
+
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -325,8 +317,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A8/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A8/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a8/ac5/readme_threadx.txt b/ports/cortex_a8/ac5/readme_threadx.txt
index 13fa045fb..a52ee1564 100644
--- a/ports/cortex_a8/ac5/readme_threadx.txt
+++ b/ports/cortex_a8/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A8
+ Microsoft's Azure RTOS ThreadX for Cortex-A8
Thumb & 32-bit Mode
@@ -6,21 +6,21 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -29,45 +29,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-A8 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-A8 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -83,10 +83,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -97,161 +97,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -269,39 +269,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A8
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A8 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -312,12 +312,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -325,7 +325,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -338,7 +338,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -348,12 +348,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -370,22 +370,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -393,10 +393,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -409,12 +409,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A8 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A8 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -423,7 +423,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -451,18 +451,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -478,7 +478,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -494,29 +494,29 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-A8 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
10. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a8/ac5/src/tx_thread_context_restore.s b/ports/cortex_a8/ac5/src/tx_thread_context_restore.s
index d2cbdc19d..403ddd312 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_a8/ac5/src/tx_thread_context_save.s b/ports/cortex_a8/ac5/src/tx_thread_context_save.s
index 6c1d90c88..fbcea2bd1 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -109,7 +103,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -125,7 +119,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -139,13 +133,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -165,7 +159,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -175,7 +169,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -190,7 +184,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a8/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_a8/ac5/src/tx_thread_fiq_context_restore.s
index 9fb183398..3efdad982 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -164,7 +158,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -209,7 +203,7 @@ _tx_skip_fiq_vfp_save
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -221,7 +215,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a8/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_a8/ac5/src/tx_thread_fiq_context_save.s
index 7ba4eee39..2f9486dc3 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_end.s
index 0089d6bdc..885cbcf80 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_start.s
index 34b3d0a92..585a1e7dd 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a8/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_a8/ac5/src/tx_thread_interrupt_control.s
index 8339da103..ee782a885 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a8/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_a8/ac5/src/tx_thread_interrupt_disable.s
index 72586e253..301a33e67 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_a8/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_a8/ac5/src/tx_thread_interrupt_restore.s
index 630a5dc97..25b1dbaee 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_end.s
index c3ff143ff..5be031b45 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_start.s
index 67f483782..72b194a8b 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a8/ac5/src/tx_thread_schedule.s b/ports/cortex_a8/ac5/src/tx_thread_schedule.s
index f59821925..55808cb76 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +41,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +102,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -233,3 +228,4 @@ __tx_no_thread_to_disable
END
+
diff --git a/ports/cortex_a8/ac5/src/tx_thread_stack_build.s b/ports/cortex_a8/ac5/src/tx_thread_stack_build.s
index 18f160956..571c5d78a 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A8 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a8/ac5/src/tx_thread_system_return.s b/ports/cortex_a8/ac5/src/tx_thread_system_return.s
index 621559449..d0a1e7386 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -104,7 +98,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
IF :DEF:TX_ENABLE_FIQ_SUPPORT
diff --git a/ports/cortex_a8/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_a8/ac5/src/tx_thread_vectored_context_save.s
index e7d10bfbd..f5cb7e2a4 100644
--- a/ports/cortex_a8/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a8/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a8/ac5/src/tx_timer_interrupt.s b/ports/cortex_a8/ac5/src/tx_timer_interrupt.s
index 41b21a339..00a0b30c9 100644
--- a/ports/cortex_a8/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_a8/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A8/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A8/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a8/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a8/ac6/example_build/sample_threadx/.cproject
index e039b0b0e..00f3c7c70 100644
--- a/ports/cortex_a8/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a8/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a8/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a8/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a8/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a8/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a8/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a8/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a8/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a8/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a8/ac6/example_build/tx/.cproject b/ports/cortex_a8/ac6/example_build/tx/.cproject
index 3d1f08180..e2f1d00bf 100644
--- a/ports/cortex_a8/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a8/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a8/ac6/inc/tx_port.h b/ports/cortex_a8/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a8/ac6/inc/tx_port.h
+++ b/ports/cortex_a8/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a8/ac6/readme_threadx.txt b/ports/cortex_a8/ac6/readme_threadx.txt
index a6e5a5c0f..37125d30f 100644
--- a/ports/cortex_a8/ac6/readme_threadx.txt
+++ b/ports/cortex_a8/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A8
+ Microsoft's Azure RTOS ThreadX for Cortex-A8
Using ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -23,40 +23,40 @@ Since there is no ARM Cortex-A8 FVP, there are no instructions here for running
the demonstration; users are expected to run the demonstration on their platform
of choice.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
the ThreadX library file sample_threadx.axf.
4. System Initialization
-The entry point in ThreadX for the Cortex-A8 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A8 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -74,52 +74,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A8
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A8 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -127,7 +127,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -140,7 +140,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -150,12 +150,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -172,22 +172,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -195,10 +195,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -211,12 +211,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -225,7 +225,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -253,18 +253,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -280,7 +280,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -296,12 +296,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -309,7 +309,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a8/ac6/src/tx_thread_context_restore.S b/ports/cortex_a8/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a8/ac6/src/tx_thread_context_save.S b/ports/cortex_a8/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a8/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a8/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a8/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a8/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a8/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a8/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a8/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_schedule.S b/ports/cortex_a8/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a8/ac6/src/tx_thread_stack_build.S b/ports/cortex_a8/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_system_return.S b/ports/cortex_a8/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a8/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a8/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a8/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a8/ac6/src/tx_timer_interrupt.S b/ports/cortex_a8/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a8/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a8/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_a8/ghs/example_build/tx_initialize_low_level.arm
index 2fa61dc0a..96b77de48 100644
--- a/ports/cortex_a8/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_a8/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/inc/tx_el.h b/ports/cortex_a8/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_a8/ghs/inc/tx_el.h
+++ b/ports/cortex_a8/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_a8/ghs/inc/tx_port.h b/ports/cortex_a8/ghs/inc/tx_port.h
index 6750bfe7f..d9dd3413d 100644
--- a/ports/cortex_a8/ghs/inc/tx_port.h
+++ b/ports/cortex_a8/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A8/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A8/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a8/ghs/readme_threadx.txt b/ports/cortex_a8/ghs/readme_threadx.txt
index be5de73a4..849c7efe5 100644
--- a/ports/cortex_a8/ghs/readme_threadx.txt
+++ b/ports/cortex_a8/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A8
+ Microsoft's Azure RTOS ThreadX for Cortex-A8
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-A8 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-A8 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-A8 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A8
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-A8 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-A8 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-A8 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-A8 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -521,7 +521,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-A8/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-A8/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_a8/ghs/src/tx_el.c b/ports/cortex_a8/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_a8/ghs/src/tx_el.c
+++ b/ports/cortex_a8/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_a8/ghs/src/tx_thread_context_restore.arm b/ports/cortex_a8/ghs/src/tx_thread_context_restore.arm
index 95465a109..8bc0eb431 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_context_save.arm b/ports/cortex_a8/ghs/src/tx_thread_context_save.arm
index eb40e4c83..e0dead86c 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_a8/ghs/src/tx_thread_fiq_context_restore.arm
index dc0f5050c..a1ae9cc07 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_a8/ghs/src/tx_thread_fiq_context_save.arm
index a233eb30f..4befded9f 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_end.arm
index 6f78dabb0..48065cce0 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_start.arm
index ea667ebb4..178e2ac64 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_a8/ghs/src/tx_thread_interrupt_control.arm
index d43559b4e..11283b990 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_a8/ghs/src/tx_thread_interrupt_disable.arm
index 66db3d040..f693d5789 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_a8/ghs/src/tx_thread_interrupt_restore.arm
index 372bde014..c344a4822 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_end.arm
index b16499ad3..ebb1692bc 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_start.arm
index 1edd8c566..26d03b012 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_schedule.arm b/ports/cortex_a8/ghs/src/tx_thread_schedule.arm
index f6ae087bc..eca5af9c8 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_stack_build.arm b/ports/cortex_a8/ghs/src/tx_thread_stack_build.arm
index a9c921d45..d5320f10e 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_system_return.arm b/ports/cortex_a8/ghs/src/tx_thread_system_return.arm
index 32a1c85ff..af41522ea 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_a8/ghs/src/tx_thread_vectored_context_save.arm
index 0fcc99c37..ddbea71e6 100644
--- a/ports/cortex_a8/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_a8/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/ghs/src/tx_timer_interrupt.arm b/ports/cortex_a8/ghs/src/tx_timer_interrupt.arm
index eeb146724..8a64d59e4 100644
--- a/ports/cortex_a8/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_a8/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/gnu/example_build/MP_GIC.h b/ports/cortex_a8/gnu/example_build/MP_GIC.h
index 82f2ea13f..070a4936a 100644
--- a/ports/cortex_a8/gnu/example_build/MP_GIC.h
+++ b/ports/cortex_a8/gnu/example_build/MP_GIC.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a8/gnu/example_build/MP_GIC.s b/ports/cortex_a8/gnu/example_build/MP_GIC.s
index 6626d5835..1387a5b56 100644
--- a/ports/cortex_a8/gnu/example_build/MP_GIC.s
+++ b/ports/cortex_a8/gnu/example_build/MP_GIC.s
@@ -1,7 +1,7 @@
//----------------------------------------------------------------
// Copyright (c) 2005-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//
// Cortex-A8MP example - Startup Code
@@ -37,7 +37,7 @@ enableGIC:
STR r1, [r0] // Write the GIC Enable Register (ICDDCR)
BX lr
-
+
// ------------------------------------------------------------
.global disableGIC
@@ -54,7 +54,7 @@ disableGIC:
STR r1, [r0] // Write the GIC Enable Register (ICDDCR)
BX lr
-
+
// ------------------------------------------------------------
@@ -84,10 +84,10 @@ enableIntID:
STR r3, [r0, r2] // Store out (ICDISER)
BX lr
-
+
// ------------------------------------------------------------
-
+
.global disableIntID
.type disableIntID,function
// void disableIntID(unsigned int ID)
@@ -112,7 +112,7 @@ disableIntID:
STR r3, [r0, r2] // Store out (ICDICER)
BX lr
-
+
// ------------------------------------------------------------
@@ -130,7 +130,7 @@ setIntPriority:
// r0 = base addr
// r1 = priority
// r2 = ID
-
+
// Make sure that priority value is only 5 bits, and convert to expected format
AND r1, r1, #0x1F
MOV r1, r1, LSL #3
@@ -156,7 +156,7 @@ setIntPriority:
STR r3, [r0] // And store it back again (ICDIPR)
BX lr
-
+
// ------------------------------------------------------------
@@ -175,7 +175,7 @@ enableGICProcessorInterface:
STR r1, [r0, #0x0] // Write the Processor Interface Control register (ICCICR/ICPICR)
BX lr
-
+
// ------------------------------------------------------------
@@ -195,7 +195,7 @@ disableGICProcessorInterface:
STR r1, [r0, #0x0] // Write the Processor Interface Control register (ICCICR/ICPICR)
BX lr
-
+
// ------------------------------------------------------------
@@ -214,8 +214,8 @@ setPriorityMask:
STR r0, [r1, #0x4] // Write the Priority Mask register (ICCPMR/ICCIPMR)
BX lr
-
-
+
+
// ------------------------------------------------------------
.global setBinaryPoint
@@ -231,7 +231,7 @@ setBinaryPoint:
STR r0, [r1, #0x8] // Write the Binary register (ICCBPR/ICCBPR)
BX lr
-
+
// ------------------------------------------------------------
@@ -245,7 +245,7 @@ readIntAck:
LDR r0, [r0, #0xC] // Read the Interrupt Acknowledge Register (ICCIAR)
BX lr
-
+
// ------------------------------------------------------------
@@ -262,8 +262,8 @@ writeEOI:
STR r0, [r1, #0x10] // Write ID to the End of Interrupt register (ICCEOIR)
BX lr
-
-
+
+
//----------------------------------------------------------------
// SGI
//----------------------------------------------------------------
diff --git a/ports/cortex_a8/gnu/example_build/MP_PrivateTimer.S b/ports/cortex_a8/gnu/example_build/MP_PrivateTimer.S
index b1e2701bb..7b83be9eb 100644
--- a/ports/cortex_a8/gnu/example_build/MP_PrivateTimer.S
+++ b/ports/cortex_a8/gnu/example_build/MP_PrivateTimer.S
@@ -64,7 +64,7 @@ stop_private_timer:
get_private_timer_count:
BX lr
-
+
// ------------------------------------------------------------
// void clear_private_timer_irq(void)
diff --git a/ports/cortex_a8/gnu/example_build/reset.S b/ports/cortex_a8/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a8/gnu/example_build/reset.S
+++ b/ports/cortex_a8/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a8/gnu/example_build/sample_threadx.ld b/ports/cortex_a8/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a8/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a8/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a8/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a8/gnu/example_build/tx_initialize_low_level.S
index a0adb55d2..1120db44f 100644
--- a/ports/cortex_a8/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a8/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,17 +101,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
@@ -242,7 +232,7 @@ __tx_irq_processing_return:
if nested IRQ interrupts are desired. Interrupts may be re-enabled over
small code sequences where lr is saved before enabling interrupts and
restored after interrupts are again disabled. */
-
+
PUSH {r4, r5} // Save some preserved registers (r5 is saved just for 8-byte alignment)
BL readIntAck
MOV r4, r0
diff --git a/ports/cortex_a8/gnu/example_build/v7.h b/ports/cortex_a8/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a8/gnu/example_build/v7.h
+++ b/ports/cortex_a8/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a8/gnu/example_build/v7.s b/ports/cortex_a8/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a8/gnu/example_build/v7.s
+++ b/ports/cortex_a8/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a8/gnu/inc/tx_port.h b/ports/cortex_a8/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a8/gnu/inc/tx_port.h
+++ b/ports/cortex_a8/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a8/gnu/readme_threadx.txt b/ports/cortex_a8/gnu/readme_threadx.txt
index 8f57bf4ae..437f49d82 100644
--- a/ports/cortex_a8/gnu/readme_threadx.txt
+++ b/ports/cortex_a8/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A8
+ Microsoft's Azure RTOS ThreadX for Cortex-A8
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-A8 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-A8 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A8
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A8 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -483,7 +483,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a8/gnu/src/tx_thread_context_restore.S b/ports/cortex_a8/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a8/gnu/src/tx_thread_context_save.S b/ports/cortex_a8/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a8/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a8/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a8/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a8/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a8/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a8/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a8/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_schedule.S b/ports/cortex_a8/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a8/gnu/src/tx_thread_stack_build.S b/ports/cortex_a8/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_system_return.S b/ports/cortex_a8/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a8/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a8/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a8/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a8/gnu/src/tx_timer_interrupt.S b/ports/cortex_a8/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a8/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a8/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a8/iar/example_build/cstartup.s b/ports/cortex_a8/iar/example_build/cstartup.s
index b95efc0e9..3da2b79df 100644
--- a/ports/cortex_a8/iar/example_build/cstartup.s
+++ b/ports/cortex_a8/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/cortex_a8/iar/example_build/sample_threadx.c b/ports/cortex_a8/iar/example_build/sample_threadx.c
index c7c300cb1..afbd4ea81 100644
--- a/ports/cortex_a8/iar/example_build/sample_threadx.c
+++ b/ports/cortex_a8/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a8/iar/example_build/tx_initialize_low_level.s b/ports/cortex_a8/iar/example_build/tx_initialize_low_level.s
index f6ed88d74..eff628771 100644
--- a/ports/cortex_a8/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a8/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,45 +75,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a8/iar/inc/tx_port.h b/ports/cortex_a8/iar/inc/tx_port.h
index 494a9be78..940d7f688 100644
--- a/ports/cortex_a8/iar/inc/tx_port.h
+++ b/ports/cortex_a8/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A8/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A8/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -188,7 +180,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -202,18 +194,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -227,11 +219,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -241,23 +233,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -285,8 +277,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -297,22 +289,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -382,8 +374,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A8/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A8/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_a8/iar/readme_threadx.txt b/ports/cortex_a8/iar/readme_threadx.txt
index 9c55e7297..cd01608c4 100644
--- a/ports/cortex_a8/iar/readme_threadx.txt
+++ b/ports/cortex_a8/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A8
+ Microsoft's Azure RTOS ThreadX for Cortex-A8
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-A8 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-A8 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-A8 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-A8 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,146 +92,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -245,29 +245,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A8
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A8 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -278,12 +278,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -291,7 +291,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -304,7 +304,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -315,12 +315,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,24 +337,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -362,15 +362,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -378,7 +378,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -389,12 +389,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A8 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A8 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -403,7 +403,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -434,18 +434,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -463,7 +463,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -479,22 +479,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-A8 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A8 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -506,14 +506,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a8/iar/src/tx_iar.c b/ports/cortex_a8/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_a8/iar/src/tx_iar.c
+++ b/ports/cortex_a8/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_a8/iar/src/tx_thread_context_restore.s b/ports/cortex_a8/iar/src/tx_thread_context_restore.s
index b189af01c..fb356284a 100644
--- a/ports/cortex_a8/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_a8/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,7 +36,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -51,47 +51,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +112,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -193,7 +184,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
diff --git a/ports/cortex_a8/iar/src/tx_thread_context_save.s b/ports/cortex_a8/iar/src/tx_thread_context_save.s
index cf9c22eb0..98f882833 100644
--- a/ports/cortex_a8/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_a8/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,46 +43,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -99,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -119,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -135,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -149,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -175,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -185,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -200,7 +191,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a8/iar/src/tx_thread_fiq_context_restore.s b/ports/cortex_a8/iar/src/tx_thread_fiq_context_restore.s
index 723d0ba57..091a55513 100644
--- a/ports/cortex_a8/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a8/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,47 +52,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +113,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +163,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -232,7 +223,7 @@ _tx_skip_irq_vfp_save:
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a8/iar/src/tx_thread_fiq_context_save.s b/ports/cortex_a8/iar/src/tx_thread_fiq_context_save.s
index a9fa3890d..c9cdc190f 100644
--- a/ports/cortex_a8/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a8/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -107,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -123,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -167,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -187,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_end.s
index ea0855c5e..980a803e9 100644
--- a/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,55 +34,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
diff --git a/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_start.s
index 76fe6bb54..8ec718334 100644
--- a/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a8/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a8/iar/src/tx_thread_interrupt_control.s b/ports/cortex_a8/iar/src/tx_thread_interrupt_control.s
index c1a42e430..a8c64050d 100644
--- a/ports/cortex_a8/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a8/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,42 +35,36 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a8/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_a8/iar/src/tx_thread_interrupt_disable.s
index 15f9c4253..5dbf7181e 100644
--- a/ports/cortex_a8/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a8/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_a8/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_a8/iar/src/tx_thread_interrupt_restore.s
index 90fc68e95..3d40ceef8 100644
--- a/ports/cortex_a8/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a8/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a8/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_a8/iar/src/tx_thread_irq_nesting_end.s
index b0c927b29..de93f7382 100644
--- a/ports/cortex_a8/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a8/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,55 +35,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_a8/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_a8/iar/src/tx_thread_irq_nesting_start.s
index 0b9e4a773..2a327a179 100644
--- a/ports/cortex_a8/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a8/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a8/iar/src/tx_thread_schedule.s b/ports/cortex_a8/iar/src/tx_thread_schedule.s
index 0688152e2..4044a81f4 100644
--- a/ports/cortex_a8/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_a8/iar/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,48 +44,39 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -114,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -123,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -137,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -198,7 +190,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -218,7 +210,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -239,3 +231,4 @@ __tx_no_thread_to_disable:
END
+
diff --git a/ports/cortex_a8/iar/src/tx_thread_stack_build.s b/ports/cortex_a8/iar/src/tx_thread_stack_build.s
index 962f78131..ed90c4a33 100644
--- a/ports/cortex_a8/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_a8/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A8 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a8/iar/src/tx_thread_system_return.s b/ports/cortex_a8/iar/src/tx_thread_system_return.s
index 13e04f6ca..42f5c9a32 100644
--- a/ports/cortex_a8/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_a8/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,47 +42,38 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -113,7 +104,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
diff --git a/ports/cortex_a8/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_a8/iar/src/tx_thread_vectored_context_save.s
index 2e1ac10cc..0816576f0 100644
--- a/ports/cortex_a8/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a8/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,46 +41,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A8/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -142,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -174,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a8/iar/src/tx_timer_interrupt.s b/ports/cortex_a8/iar/src/tx_timer_interrupt.s
index 49d4219bb..03ca45db6 100644
--- a/ports/cortex_a8/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_a8/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A8/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A8/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a9/ac5/example_build/sample_threadx.c b/ports/cortex_a9/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_a9/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_a9/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a9/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_a9/ac5/example_build/tx_initialize_low_level.s
index a15994e1e..c9b06bd1e 100644
--- a/ports/cortex_a9/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a9/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -110,45 +110,39 @@ Reset_Vector
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -199,7 +193,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -221,7 +215,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -273,7 +267,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -281,21 +275,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -305,7 +299,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -321,28 +315,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -351,7 +345,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -373,11 +367,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a9/ac5/inc/tx_port.h b/ports/cortex_a9/ac5/inc/tx_port.h
index 74ed6e00e..0c1451563 100644
--- a/ports/cortex_a9/ac5/inc/tx_port.h
+++ b/ports/cortex_a9/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A9/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A9/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
-
+
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -325,8 +317,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A9/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A9/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a9/ac5/readme_threadx.txt b/ports/cortex_a9/ac5/readme_threadx.txt
index 56cff19c9..b29a95e2d 100644
--- a/ports/cortex_a9/ac5/readme_threadx.txt
+++ b/ports/cortex_a9/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A9
+ Microsoft's Azure RTOS ThreadX for Cortex-A9
Thumb & 32-bit Mode
@@ -6,21 +6,21 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -29,45 +29,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-A9 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-A9 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -83,10 +83,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -97,161 +97,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -269,39 +269,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A9 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -312,12 +312,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -325,7 +325,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -338,7 +338,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -348,12 +348,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -370,22 +370,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -393,10 +393,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -409,12 +409,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A9 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A9 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -423,7 +423,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -451,18 +451,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -478,7 +478,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -494,28 +494,28 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-A9 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
10. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a9/ac5/src/tx_thread_context_restore.s b/ports/cortex_a9/ac5/src/tx_thread_context_restore.s
index 49add8f8c..147719a29 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_a9/ac5/src/tx_thread_context_save.s b/ports/cortex_a9/ac5/src/tx_thread_context_save.s
index 2ccb6ba90..234277a59 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -108,7 +102,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -124,7 +118,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -138,13 +132,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -164,7 +158,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -174,7 +168,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -189,7 +183,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a9/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_a9/ac5/src/tx_thread_fiq_context_restore.s
index 3069b0de3..5f75fa49e 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -163,7 +157,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -208,7 +202,7 @@ _tx_skip_fiq_vfp_save
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -220,7 +214,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a9/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_a9/ac5/src/tx_thread_fiq_context_save.s
index 7faeb3c87..ce4ac25f7 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_end.s
index 43ae1483d..db3131d32 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_start.s
index 876f19a5d..d5bac9db9 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a9/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_a9/ac5/src/tx_thread_interrupt_control.s
index eb141f70f..0a4caa713 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a9/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_a9/ac5/src/tx_thread_interrupt_disable.s
index f3014acef..b17a24044 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_a9/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_a9/ac5/src/tx_thread_interrupt_restore.s
index b00872b38..701a21cdb 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_end.s
index 4ef900fa6..76efaf8a1 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_start.s
index 1f9dfc8dc..0f2719d87 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a9/ac5/src/tx_thread_schedule.s b/ports/cortex_a9/ac5/src/tx_thread_schedule.s
index 664bc10e2..c03f7f2b6 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +41,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +102,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -233,3 +228,4 @@ __tx_no_thread_to_disable
END
+
diff --git a/ports/cortex_a9/ac5/src/tx_thread_stack_build.s b/ports/cortex_a9/ac5/src/tx_thread_stack_build.s
index f10d9769d..eda5cb081 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A9 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a9/ac5/src/tx_thread_system_return.s b/ports/cortex_a9/ac5/src/tx_thread_system_return.s
index bc6f3087a..0dee4ef3e 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -104,7 +98,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
IF :DEF:TX_ENABLE_FIQ_SUPPORT
diff --git a/ports/cortex_a9/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_a9/ac5/src/tx_thread_vectored_context_save.s
index e2a5a8c4e..eb71247a0 100644
--- a/ports/cortex_a9/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a9/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a9/ac5/src/tx_timer_interrupt.s b/ports/cortex_a9/ac5/src/tx_timer_interrupt.s
index 05e9fddad..e88155ccc 100644
--- a/ports/cortex_a9/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_a9/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A9/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A9/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_a9/ac6/example_build/sample_threadx/.cproject b/ports/cortex_a9/ac6/example_build/sample_threadx/.cproject
index 72d51c5bd..9aa9b1e36 100644
--- a/ports/cortex_a9/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_a9/ac6/example_build/sample_threadx/.cproject
@@ -1,176 +1,176 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a9/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_a9/ac6/example_build/sample_threadx/sample_threadx.scat
index d23881cd7..66d0d95a4 100644
--- a/ports/cortex_a9/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_a9/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_a9/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_a9/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 083a57a7a..763954590 100644
--- a/ports/cortex_a9/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_a9/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -91,14 +92,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
diff --git a/ports/cortex_a9/ac6/example_build/tx/.cproject b/ports/cortex_a9/ac6/example_build/tx/.cproject
index 52a6e44ba..59f206123 100644
--- a/ports/cortex_a9/ac6/example_build/tx/.cproject
+++ b/ports/cortex_a9/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_a9/ac6/inc/tx_port.h b/ports/cortex_a9/ac6/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a9/ac6/inc/tx_port.h
+++ b/ports/cortex_a9/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a9/ac6/readme_threadx.txt b/ports/cortex_a9/ac6/readme_threadx.txt
index f8196fb53..84c154af6 100644
--- a/ports/cortex_a9/ac6/readme_threadx.txt
+++ b/ports/cortex_a9/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A9
+ Microsoft's Azure RTOS ThreadX for Cortex-A9
Using ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -22,44 +22,44 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
VE_Cortex-A9 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-a9_tx.launch' file, click
'Debug As', and then click 'cortex-a9_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-A9 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-A9 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -77,52 +77,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A9 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -130,7 +130,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -143,7 +143,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -153,12 +153,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -175,22 +175,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -198,10 +198,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -214,12 +214,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -228,7 +228,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -256,18 +256,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -283,7 +283,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -299,12 +299,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -312,7 +312,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a9/ac6/src/tx_thread_context_restore.S b/ports/cortex_a9/ac6/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a9/ac6/src/tx_thread_context_save.S b/ports/cortex_a9/ac6/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a9/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_a9/ac6/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a9/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_a9/ac6/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_a9/ac6/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_a9/ac6/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_a9/ac6/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_schedule.S b/ports/cortex_a9/ac6/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a9/ac6/src/tx_thread_stack_build.S b/ports/cortex_a9/ac6/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_system_return.S b/ports/cortex_a9/ac6/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_a9/ac6/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a9/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a9/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a9/ac6/src/tx_timer_interrupt.S b/ports/cortex_a9/ac6/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a9/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_a9/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_a9/ghs/example_build/tx_initialize_low_level.arm
index c0fe4cce4..b19d5e002 100644
--- a/ports/cortex_a9/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_a9/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/inc/tx_el.h b/ports/cortex_a9/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_a9/ghs/inc/tx_el.h
+++ b/ports/cortex_a9/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_a9/ghs/inc/tx_port.h b/ports/cortex_a9/ghs/inc/tx_port.h
index ffdf1460f..75e769003 100644
--- a/ports/cortex_a9/ghs/inc/tx_port.h
+++ b/ports/cortex_a9/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A9/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A9/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a9/ghs/readme_threadx.txt b/ports/cortex_a9/ghs/readme_threadx.txt
index db232e1fa..b32d10037 100644
--- a/ports/cortex_a9/ghs/readme_threadx.txt
+++ b/ports/cortex_a9/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A9
+ Microsoft's Azure RTOS ThreadX for Cortex-A9
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-A9 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-A9 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-A9 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-A9 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-A9 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-A9 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-A9 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -520,7 +520,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-A9/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-A9/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_a9/ghs/src/tx_el.c b/ports/cortex_a9/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_a9/ghs/src/tx_el.c
+++ b/ports/cortex_a9/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_a9/ghs/src/tx_thread_context_restore.arm b/ports/cortex_a9/ghs/src/tx_thread_context_restore.arm
index d28b00666..5366e496f 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_context_save.arm b/ports/cortex_a9/ghs/src/tx_thread_context_save.arm
index 5930e4ce4..304acf64a 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_a9/ghs/src/tx_thread_fiq_context_restore.arm
index a2abbcdee..14cb36247 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_a9/ghs/src/tx_thread_fiq_context_save.arm
index c305529e4..75298816f 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_end.arm
index c7b1e54af..c4f8b98c2 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_start.arm
index 26641c105..195899b47 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_a9/ghs/src/tx_thread_interrupt_control.arm
index b517aa844..a3a629efd 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_a9/ghs/src/tx_thread_interrupt_disable.arm
index 863408dd1..2016da562 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_a9/ghs/src/tx_thread_interrupt_restore.arm
index 89b7868d7..3dd8866f8 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_end.arm
index 0ffd056e8..17e98e412 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_start.arm
index b287af002..570ffd77c 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_schedule.arm b/ports/cortex_a9/ghs/src/tx_thread_schedule.arm
index 4ff185d61..3ab6fee4e 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_stack_build.arm b/ports/cortex_a9/ghs/src/tx_thread_stack_build.arm
index a445c985a..937395633 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_system_return.arm b/ports/cortex_a9/ghs/src/tx_thread_system_return.arm
index 10d5413e2..842404802 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_a9/ghs/src/tx_thread_vectored_context_save.arm
index c21bb4104..d8d3a946d 100644
--- a/ports/cortex_a9/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_a9/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/ghs/src/tx_timer_interrupt.arm b/ports/cortex_a9/ghs/src/tx_timer_interrupt.arm
index ee5b1680e..38f9906a8 100644
--- a/ports/cortex_a9/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_a9/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/gnu/example_build/MP_GIC.S b/ports/cortex_a9/gnu/example_build/MP_GIC.S
index d23bca237..f769bf9f4 100644
--- a/ports/cortex_a9/gnu/example_build/MP_GIC.S
+++ b/ports/cortex_a9/gnu/example_build/MP_GIC.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a9/gnu/example_build/MP_GIC.h b/ports/cortex_a9/gnu/example_build/MP_GIC.h
index 1d0476112..42a96c3db 100644
--- a/ports/cortex_a9/gnu/example_build/MP_GIC.h
+++ b/ports/cortex_a9/gnu/example_build/MP_GIC.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a9/gnu/example_build/MP_PrivateTimer.S b/ports/cortex_a9/gnu/example_build/MP_PrivateTimer.S
index a01fd0ccf..bb29b8ffa 100644
--- a/ports/cortex_a9/gnu/example_build/MP_PrivateTimer.S
+++ b/ports/cortex_a9/gnu/example_build/MP_PrivateTimer.S
@@ -93,7 +93,7 @@ get_private_timer_count:
LDR r0, [r0, #0x604] // Read count register
BX lr
-
+
// ------------------------------------------------------------
// void clear_private_timer_irq(void)
diff --git a/ports/cortex_a9/gnu/example_build/reset.S b/ports/cortex_a9/gnu/example_build/reset.S
index 3ce9efb7d..f2e0522b4 100644
--- a/ports/cortex_a9/gnu/example_build/reset.S
+++ b/ports/cortex_a9/gnu/example_build/reset.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_a9/gnu/example_build/sample_threadx.ld b/ports/cortex_a9/gnu/example_build/sample_threadx.ld
index cb42c11cb..d43e28f1d 100644
--- a/ports/cortex_a9/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_a9/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_a9/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_a9/gnu/example_build/tx_initialize_low_level.S
index 7e2182992..bf0824740 100644
--- a/ports/cortex_a9/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_a9/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,17 +101,6 @@ $_tx_initialize_low_level:
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_initialize_low_level
.type _tx_initialize_low_level,function
@@ -183,7 +173,7 @@ _stack_error_loop:
MOV r0, #0x1F
BL setPriorityMask // Set priority mask (local)
- // [EL] Change start - don't enable interrupts here!
+ // [EL] Change start - don't enable interrupts here!
//CPSIE i // Clear CPSR I bit
// [EL] Change end
@@ -202,7 +192,7 @@ _stack_error_loop:
MOV r1, #0x0
BL init_private_timer
BL start_private_timer
-
+
//
// Enable receipt of SGI 0
// ------------------------
@@ -257,7 +247,7 @@ __tx_irq_processing_return:
if nested IRQ interrupts are desired. Interrupts may be re-enabled over
small code sequences where lr is saved before enabling interrupts and
restored after interrupts are again disabled. */
-
+
PUSH {r4, r5} // Save some preserved registers (r5 is saved just for 8-byte alignment)
BL readIntAck
MOV r4, r0
diff --git a/ports/cortex_a9/gnu/example_build/v7.h b/ports/cortex_a9/gnu/example_build/v7.h
index 5a08b43fd..c18b945c5 100644
--- a/ports/cortex_a9/gnu/example_build/v7.h
+++ b/ports/cortex_a9/gnu/example_build/v7.h
@@ -4,7 +4,7 @@
//
// Copyright (c) 2011-2016 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
diff --git a/ports/cortex_a9/gnu/example_build/v7.s b/ports/cortex_a9/gnu/example_build/v7.s
index 82c9ab1e9..9487ddde0 100644
--- a/ports/cortex_a9/gnu/example_build/v7.s
+++ b/ports/cortex_a9/gnu/example_build/v7.s
@@ -3,7 +3,7 @@
//
// Copyright (c) 2011-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
// ------------------------------------------------------------
@@ -20,7 +20,7 @@
enableInterrupts:
CPSIE i
BX lr
-
+
.global disableInterrupts
.type disableInterrupts,function
@@ -28,7 +28,7 @@ enableInterrupts:
disableInterrupts:
CPSID i
BX lr
-
+
// ------------------------------------------------------------
// Cache Maintenance
@@ -44,7 +44,7 @@ enableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global disableCaches
@@ -57,7 +57,7 @@ disableCaches:
MCR p15, 0, r0, c1, c0, 0 // Write System Control Register
ISB
BX lr
-
+
.global cleanDCache
@@ -114,7 +114,7 @@ clean_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global cleanInvalidateDCache
.type cleanInvalidateDCache,function
@@ -170,7 +170,7 @@ clean_invalidate_dcache_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches
@@ -229,7 +229,7 @@ invalidate_caches_skip:
invalidate_caches_finished:
POP {r4-r12}
BX lr
-
+
.global invalidateCaches_IS
@@ -284,7 +284,7 @@ invalidate_caches_is_skip:
invalidate_caches_is_finished:
POP {r4-r12}
BX lr
-
+
// ------------------------------------------------------------
// TLB
@@ -297,7 +297,7 @@ invalidateUnifiedTLB:
MOV r0, #0
MCR p15, 0, r0, c8, c7, 0 // TLBIALL - Invalidate entire unified TLB
BX lr
-
+
.global invalidateUnifiedTLB_IS
.type invalidateUnifiedTLB_IS,function
@@ -306,7 +306,7 @@ invalidateUnifiedTLB_IS:
MOV r0, #1
MCR p15, 0, r0, c8, c3, 0 // TLBIALLIS - Invalidate entire unified TLB Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// Branch Prediction
@@ -319,7 +319,7 @@ flushBranchTargetCache:
MOV r0, #0
MCR p15, 0, r0, c7, c5, 6 // BPIALL - Invalidate entire branch predictor array
BX lr
-
+
.global flushBranchTargetCache_IS
.type flushBranchTargetCache_IS,function
@@ -328,7 +328,7 @@ flushBranchTargetCache_IS:
MOV r0, #0
MCR p15, 0, r0, c7, c1, 6 // BPIALLIS - Invalidate entire branch predictor array Inner Shareable
BX lr
-
+
// ------------------------------------------------------------
// High Vecs
@@ -343,7 +343,7 @@ enableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
.global disableHighVecs
.type disableHighVecs,function
@@ -354,7 +354,7 @@ disableHighVecs:
MCR p15, 0, r0, c1, c0, 0 // Write Control Register
ISB
BX lr
-
+
// ------------------------------------------------------------
// Context ID
@@ -366,7 +366,7 @@ disableHighVecs:
getContextID:
MRC p15, 0, r0, c13, c0, 1 // Read Context ID Register
BX lr
-
+
.global setContextID
.type setContextID,function
@@ -374,7 +374,7 @@ getContextID:
setContextID:
MCR p15, 0, r0, c13, c0, 1 // Write Context ID Register
BX lr
-
+
// ------------------------------------------------------------
// ID registers
@@ -386,7 +386,7 @@ setContextID:
getMIDR:
MRC p15, 0, r0, c0, c0, 0 // Read Main ID Register (MIDR)
BX lr
-
+
.global getMPIDR
.type getMPIDR,function
@@ -394,7 +394,7 @@ getMIDR:
getMPIDR:
MRC p15, 0, r0, c0 ,c0, 5// Read Multiprocessor ID register (MPIDR)
BX lr
-
+
// ------------------------------------------------------------
// CP15 SMP related
@@ -407,7 +407,7 @@ getMPIDR:
getBaseAddr:
MRC p15, 4, r0, c15, c0, 0 // Read peripheral base address
BX lr
-
+
// ------------------------------------------------------------
@@ -419,7 +419,7 @@ getCPUID:
MRC p15, 0, r0, c0, c0, 5 // Read CPU ID register
AND r0, r0, #0x03 // Mask off, leaving the CPU ID field
BX lr
-
+
// ------------------------------------------------------------
@@ -431,7 +431,7 @@ goToSleep:
WFI // Go into standby
B goToSleep // Catch in case of rogue events
BX lr
-
+
// ------------------------------------------------------------
@@ -451,7 +451,7 @@ joinSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
@@ -469,7 +469,7 @@ leaveSMP:
ISB
BX lr
-
+
// ------------------------------------------------------------
// End of v7.s
diff --git a/ports/cortex_a9/gnu/inc/tx_port.h b/ports/cortex_a9/gnu/inc/tx_port.h
index f9b96956a..f01530467 100644
--- a/ports/cortex_a9/gnu/inc/tx_port.h
+++ b/ports/cortex_a9/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -320,7 +307,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX ARMv7-A Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX ARMv7-A Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_a9/gnu/readme_threadx.txt b/ports/cortex_a9/gnu/readme_threadx.txt
index d4d7627a1..eb183c37d 100644
--- a/ports/cortex_a9/gnu/readme_threadx.txt
+++ b/ports/cortex_a9/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A9
+ Microsoft's Azure RTOS ThreadX for Cortex-A9
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-A9 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-A9 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A9 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
@@ -483,7 +483,7 @@ found in the file tx_initialize_low_level.S for the demonstration system.
9. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a9/gnu/src/tx_thread_context_restore.S b/ports/cortex_a9/gnu/src/tx_thread_context_restore.S
index 6b4a561d6..41b0b0d04 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,23 +80,6 @@ IRQ_MODE = 0x12 // IRQ mode
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_restore
.type _tx_thread_context_restore,function
diff --git a/ports/cortex_a9/gnu/src/tx_thread_context_save.S b/ports/cortex_a9/gnu/src/tx_thread_context_save.S
index eff062838..d2d29d342 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,23 +72,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
.global _tx_thread_context_save
.type _tx_thread_context_save,function
diff --git a/ports/cortex_a9/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_a9/gnu/src/tx_thread_fiq_context_restore.S
index d2fbebe1c..921c322c7 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -78,20 +79,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_restore
.type _tx_thread_fiq_context_restore,function
diff --git a/ports/cortex_a9/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_a9/gnu/src/tx_thread_fiq_context_save.S
index 88472a3dd..2f1a6c40e 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_fiq_context_save
.type _tx_thread_fiq_context_save,function
diff --git a/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_end.S
index fa3886b88..a7ce701ec 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ FIQ_MODE_BITS = 0x11 // FIQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_start.S
index dbed1cf22..4f095dde6 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_a9/gnu/src/tx_thread_interrupt_control.S
index d1223cb8d..a5bc47f76 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,20 +69,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_a9/gnu/src/tx_thread_interrupt_disable.S
index a87d1a06d..d7b53bc23 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,20 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_a9/gnu/src/tx_thread_interrupt_restore.S
index 53ff2813f..3c31e94b3 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,20 +68,6 @@ FIQ_MASK = 0x040
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_end.S
index 18aebc7cf..cc4db3a72 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,20 +80,6 @@ IRQ_MODE_BITS = 0x12 // IRQ mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_start.S
index a2ffd35dc..3635874db 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,20 +73,6 @@ SYS_MODE_BITS = 0x1F // System mode bits
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_schedule.S b/ports/cortex_a9/gnu/src/tx_thread_schedule.S
index 07dd6f7f2..a74e20507 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,6 +40,14 @@
#define IRQ_MODE 0x12 // IRQ mode
#define SVC_MODE 0x13 // SVC mode
+#ifdef TX_ENABLE_VFP_SUPPORT
+#define IRQ_MASK 0x80
+#endif
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define FIQ_MASK 0x40
+#endif
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -73,23 +82,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
@@ -259,3 +251,4 @@ no_fiq:
BX lr
#endif
+
diff --git a/ports/cortex_a9/gnu/src/tx_thread_stack_build.S b/ports/cortex_a9/gnu/src/tx_thread_stack_build.S
index 3876225af..827554a74 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,20 +75,6 @@ CPSR_MASK = 0xBF // Mask initial CPSR, T, IRQ int
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_system_return.S b/ports/cortex_a9/gnu/src/tx_thread_system_return.S
index 0eed478db..1a17446bc 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,23 +69,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_a9/gnu/src/tx_thread_vectored_context_save.S
index fe8a98e83..91653b759 100644
--- a/ports/cortex_a9/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_a9/gnu/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,20 +67,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* execution profile support, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
.global _tx_thread_vectored_context_save
.type _tx_thread_vectored_context_save,function
diff --git a/ports/cortex_a9/gnu/src/tx_timer_interrupt.S b/ports/cortex_a9/gnu/src/tx_timer_interrupt.S
index cb0c1fa26..179ac8949 100644
--- a/ports/cortex_a9/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_a9/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,20 +78,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-25-2022 Zhen Kong Updated comments, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Modified comment(s), added */
-/* #include tx_user.h, */
-/* resulting in version 6.3.0 */
-/* 12-31-2023 Yajun Xia Modified comment(s), */
-/* Added thumb mode support, */
-/* resulting in version 6.4.0 */
-/* */
/**************************************************************************/
#if defined(THUMB_MODE)
.thumb_func
diff --git a/ports/cortex_a9/iar/example_build/cstartup.s b/ports/cortex_a9/iar/example_build/cstartup.s
index 647de2e8e..b4ed8f87f 100644
--- a/ports/cortex_a9/iar/example_build/cstartup.s
+++ b/ports/cortex_a9/iar/example_build/cstartup.s
@@ -1,7 +1,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Part one of the system initialization code,
+;; Part one of the system initialization code,
;; contains low-level
;; initialization.
;;
@@ -71,13 +71,13 @@ FIQ_Addr: DCD __tx_fiq_handler
SECTION .text:CODE:NOROOT(2)
-; PUBLIC ?cstartup
+; PUBLIC ?cstartup
EXTERN ?main
REQUIRE __vector
- ARM
-
-__iar_program_start:
+ ARM
+
+__iar_program_start:
?cstartup:
;
diff --git a/ports/cortex_a9/iar/example_build/sample_threadx.c b/ports/cortex_a9/iar/example_build/sample_threadx.c
index c7c300cb1..afbd4ea81 100644
--- a/ports/cortex_a9/iar/example_build/sample_threadx.c
+++ b/ports/cortex_a9/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_a9/iar/example_build/tx_initialize_low_level.s b/ports/cortex_a9/iar/example_build/tx_initialize_low_level.s
index 5820192d2..6d8bfc9fa 100644
--- a/ports/cortex_a9/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_a9/iar/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -62,7 +62,7 @@ SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -75,45 +75,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -146,7 +140,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -188,7 +182,7 @@ __tx_reserved_handler
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -196,17 +190,17 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -221,7 +215,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -240,22 +234,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -264,7 +258,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -288,11 +282,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_a9/iar/inc/tx_port.h b/ports/cortex_a9/iar/inc/tx_port.h
index be24e9b9d..46f042a9f 100644
--- a/ports/cortex_a9/iar/inc/tx_port.h
+++ b/ports/cortex_a9/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-A9/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-A9/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,12 +107,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -130,8 +122,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -189,7 +181,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -203,18 +195,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -228,11 +220,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -242,23 +234,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -286,8 +278,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -298,22 +290,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -383,8 +375,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-A9/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-A9/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_a9/iar/readme_threadx.txt b/ports/cortex_a9/iar/readme_threadx.txt
index 1b8ed694b..bd142b40c 100644
--- a/ports/cortex_a9/iar/readme_threadx.txt
+++ b/ports/cortex_a9/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-A9
+ Microsoft's Azure RTOS ThreadX for Cortex-A9
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-A9 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-A9 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-A9 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-A9 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,146 +92,146 @@ The following are conditional compilation options for building the ThreadX libra
and application:
- TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
FIQ interrupt handling support in the
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
TX_THUMB Defined, this option enables the BX LR calling return sequence
@@ -245,29 +245,29 @@ and application:
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-A9
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-A9 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -278,12 +278,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -291,7 +291,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -304,7 +304,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -315,12 +315,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -337,24 +337,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -362,15 +362,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -378,7 +378,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -389,12 +389,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-A9 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-A9 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -403,7 +403,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -434,18 +434,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
-longer required, calling the _tx_thread_fiq_nesting_end service disables
-nesting by disabling FIQ interrupts and switching back to FIQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
preparation for the FIQ context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -463,7 +463,7 @@ __tx_fiq_processing_return:
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -479,22 +479,22 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-A9 Mixed Mode
-By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-A9 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
-built in 32-bit mode. In addition, if any Thumb code is used the entire
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
ThreadX assembly source should be built with TX_THUMB defined.
@@ -506,14 +506,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
11. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_a9/iar/src/tx_iar.c b/ports/cortex_a9/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_a9/iar/src/tx_iar.c
+++ b/ports/cortex_a9/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_a9/iar/src/tx_thread_context_restore.s b/ports/cortex_a9/iar/src/tx_thread_context_restore.s
index e063a2b10..967760e09 100644
--- a/ports/cortex_a9/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_a9/iar/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,7 +36,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -51,47 +51,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +112,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -193,7 +184,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
@@ -204,7 +195,7 @@ __tx_thread_preempt_restore
VSTMDB sp!, {D0-D15} ; Save D0-D15
_tx_skip_fiq_vfp_save:
#endif
-
+
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
diff --git a/ports/cortex_a9/iar/src/tx_thread_context_save.s b/ports/cortex_a9/iar/src/tx_thread_context_save.s
index 75045787e..7603d79a1 100644
--- a/ports/cortex_a9/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_a9/iar/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,46 +43,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -99,7 +90,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
@@ -119,7 +110,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -135,7 +126,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -149,13 +140,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -175,7 +166,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -185,7 +176,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -200,7 +191,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_a9/iar/src/tx_thread_fiq_context_restore.s b/ports/cortex_a9/iar/src/tx_thread_fiq_context_restore.s
index 999febaed..7d97d09b2 100644
--- a/ports/cortex_a9/iar/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_a9/iar/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,7 +37,7 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
THUMB_MASK DEFINE 0x20 ; Thumb bit mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
@@ -52,47 +52,38 @@ SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
EXTERN _tx_execution_isr_exit
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -122,13 +113,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -172,7 +163,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -232,7 +223,7 @@ _tx_skip_irq_vfp_save:
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_a9/iar/src/tx_thread_fiq_context_save.s b/ports/cortex_a9/iar/src/tx_thread_fiq_context_save.s
index 7f974a726..5eabfd4bb 100644
--- a/ports/cortex_a9/iar/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_a9/iar/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,46 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +83,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -107,7 +98,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -123,38 +114,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -167,7 +158,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -187,18 +178,18 @@ __tx_thread_fiq_idle_system_save
#endif
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
;
END
diff --git a/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_end.s b/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_end.s
index 27221a2b8..42aea60c9 100644
--- a/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,55 +34,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
diff --git a/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_start.s b/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_start.s
index af3d7786e..52467afa5 100644
--- a/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_a9/iar/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_a9/iar/src/tx_thread_interrupt_control.s b/ports/cortex_a9/iar/src/tx_thread_interrupt_control.s
index 75d7279be..acb20eaf7 100644
--- a/ports/cortex_a9/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_a9/iar/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,42 +35,36 @@ INT_MASK DEFINE 0x80 ; Interrupt bit mask
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_a9/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_a9/iar/src/tx_thread_interrupt_disable.s
index ce8e51cf2..c7c2539eb 100644
--- a/ports/cortex_a9/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_a9/iar/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,41 +36,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_a9/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_a9/iar/src/tx_thread_interrupt_restore.s
index bad3cf79b..eb6968c85 100644
--- a/ports/cortex_a9/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_a9/iar/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_a9/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_a9/iar/src/tx_thread_irq_nesting_end.s
index a3e6d8195..12ab0fd58 100644
--- a/ports/cortex_a9/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_a9/iar/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,55 +35,49 @@ DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
#else
DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
#endif
-MODE_MASK DEFINE 0x1F ; Mode mask
+MODE_MASK DEFINE 0x1F ; Mode mask
IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_a9/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_a9/iar/src/tx_thread_irq_nesting_start.s
index ed787d248..77d2cd5b5 100644
--- a/ports/cortex_a9/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_a9/iar/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ MODE_MASK DEFINE 0x1F ; Mode mask
SYS_MODE_BITS DEFINE 0x1F ; System mode bits
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s79). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_a9/iar/src/tx_thread_schedule.s b/ports/cortex_a9/iar/src/tx_thread_schedule.s
index 8f221f165..be461cb16 100644
--- a/ports/cortex_a9/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_a9/iar/src/tx_thread_schedule.s
@@ -1,18 +1,19 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -43,48 +44,39 @@ ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -114,7 +106,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -123,7 +115,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -137,7 +129,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -199,7 +191,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -219,7 +211,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -240,3 +232,4 @@ __tx_no_thread_to_disable:
END
+
diff --git a/ports/cortex_a9/iar/src/tx_thread_stack_build.s b/ports/cortex_a9/iar/src/tx_thread_stack_build.s
index 8b153c140..3fa21263e 100644
--- a/ports/cortex_a9/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_a9/iar/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -37,58 +37,52 @@ CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints en
#endif
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
CODE32
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-A9 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_a9/iar/src/tx_thread_system_return.s b/ports/cortex_a9/iar/src/tx_thread_system_return.s
index d8d1b096d..8f3573808 100644
--- a/ports/cortex_a9/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_a9/iar/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -42,47 +42,38 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -121,7 +112,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
;
#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
diff --git a/ports/cortex_a9/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_a9/iar/src/tx_thread_vectored_context_save.s
index 76d9b155e..923863ed8 100644
--- a/ports/cortex_a9/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_a9/iar/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,46 +41,37 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-A9/IAR */
;/* 6.1.9 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 10-15-2021 William E. Lamie Modified comment(s), added */
-;/* execution profile support, */
-;/* resulting in version 6.1.9 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -142,7 +133,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -174,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_a9/iar/src/tx_timer_interrupt.s b/ports/cortex_a9/iar/src/tx_timer_interrupt.s
index 86c6960e3..d7b9810e0 100644
--- a/ports/cortex_a9/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_a9/iar/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-A9/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-A9/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_m0/ac5/example_build/sample_threadx.c b/ports/cortex_m0/ac5/example_build/sample_threadx.c
index 4d95c2eda..dd5ee1554 100644
--- a/ports/cortex_m0/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_m0/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m0/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_m0/ac5/example_build/tx_initialize_low_level.s
index f1a83341a..b16b3e200 100644
--- a/ports/cortex_m0/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m0/ac5/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -120,12 +120,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m0/ac5/inc/tx_port.h b/ports/cortex_m0/ac5/inc/tx_port.h
index 20d9c4ee7..f163f1c64 100644
--- a/ports/cortex_m0/ac5/inc/tx_port.h
+++ b/ports/cortex_m0/ac5/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,18 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -64,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -113,7 +102,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -124,8 +113,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -164,7 +153,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -178,13 +167,13 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -198,11 +187,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -210,10 +199,10 @@ ULONG _tx_misra_time_stamp_get(VOID);
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
-#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
#ifndef TX_MISRA_ENABLE
@@ -246,7 +235,7 @@ register unsigned int _ipsr __asm("ipsr");
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | _ipsr)
@@ -263,19 +252,19 @@ ULONG _tx_misra_ipsr_get(VOID);
zero after initialization for Cortex-M ports. */
#ifndef TX_THREAD_SYSTEM_RETURN_CHECK
-#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
+#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -322,8 +311,8 @@ unsigned int was_masked;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M0/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M0/AC5 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m0/ac5/readme_threadx.txt b/ports/cortex_m0/ac5/readme_threadx.txt
index 301aa31e9..20f7ebef4 100644
--- a/ports/cortex_m0/ac5/readme_threadx.txt
+++ b/ports/cortex_m0/ac5/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M0
+ Microsoft's Azure RTOS ThreadX for Cortex-M0
Using ARM Compiler 5 (AC5)
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the AC5
-development environment. At this point you may run the build_threadx.bat batch
-file. This will build the ThreadX run-time environment in the "example_build"
-directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the AC5
+development environment. At this point you may run the build_threadx.bat batch
+file. This will build the ThreadX run-time environment in the "example_build"
+directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -21,27 +21,27 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M0 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M0 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -50,11 +50,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M0 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r8
0x04 r9
@@ -76,21 +76,21 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M0
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
diff --git a/ports/cortex_m0/ac5/src/tx_thread_context_restore.s b/ports/cortex_m0/ac5/src/tx_thread_context_restore.s
index 673ba8c68..85d6cf35a 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -20,7 +20,7 @@
;/**************************************************************************/
;
;
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_isr_exit
#endif
;
@@ -61,19 +61,13 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
EXPORT _tx_thread_context_restore
_tx_thread_context_restore
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR exit function to indicate an ISR is complete. */
;
diff --git a/ports/cortex_m0/ac5/src/tx_thread_context_save.s b/ports/cortex_m0/ac5/src/tx_thread_context_save.s
index df7d1721d..d0c2c9e49 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -20,7 +20,7 @@
;/**************************************************************************/
;
;
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_isr_enter
#endif
;
@@ -61,18 +61,12 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
EXPORT _tx_thread_context_save
_tx_thread_context_save
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR enter function to indicate an ISR is executing. */
;
diff --git a/ports/cortex_m0/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_m0/ac5/src/tx_thread_interrupt_control.s
index a8504791c..be0da62d3 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/cortex_m0/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_m0/ac5/src/tx_thread_interrupt_disable.s
index aac316ea8..86ab45622 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(UINT new_posture)
;{
diff --git a/ports/cortex_m0/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_m0/ac5/src/tx_thread_interrupt_restore.s
index b94b9e7bd..8e71728af 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_interrupt_restore(UINT new_posture)
;{
diff --git a/ports/cortex_m0/ac5/src/tx_thread_schedule.s b/ports/cortex_m0/ac5/src/tx_thread_schedule.s
index 06f03ccaa..701eeef43 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -25,7 +25,7 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_system_stack_ptr
IMPORT _tx_thread_preempt_disable
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_thread_enter
IMPORT _tx_execution_thread_exit
#endif
@@ -71,15 +71,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-02-2021 Scott Larson Modified comment(s), add */
-;/* low power code, */
-;/* resulting in version 6.1.5 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
@@ -126,7 +117,7 @@ __tx_PendSVHandler
;
__tx_ts_handler
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
;
@@ -209,7 +200,7 @@ __tx_ts_restore
;
STR r5, [r4] ; Setup global time-slice
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread entry function to indicate the thread is executing. */
;
diff --git a/ports/cortex_m0/ac5/src/tx_thread_stack_build.s b/ports/cortex_m0/ac5/src/tx_thread_stack_build.s
index 8324238ab..e1cf9d162 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/cortex_m0/ac5/src/tx_thread_system_return.s b/ports/cortex_m0/ac5/src/tx_thread_system_return.s
index d37623fce..db1ab63d3 100644
--- a/ports/cortex_m0/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_m0/ac5/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/cortex_m0/ac5/src/tx_timer_interrupt.s b/ports/cortex_m0/ac5/src/tx_timer_interrupt.s
index e6ebbc76c..b712487f1 100644
--- a/ports/cortex_m0/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_m0/ac5/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,12 +71,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/cortex_m0/ac6/example_build/sample_threadx/.cproject b/ports/cortex_m0/ac6/example_build/sample_threadx/.cproject
index ca43166b4..a6b39187a 100644
--- a/ports/cortex_m0/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_m0/ac6/example_build/sample_threadx/.cproject
@@ -1,166 +1,166 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m0/ac6/example_build/sample_threadx/exceptions.c b/ports/cortex_m0/ac6/example_build/sample_threadx/exceptions.c
index 965970485..47c84ea15 100644
--- a/ports/cortex_m0/ac6/example_build/sample_threadx/exceptions.c
+++ b/ports/cortex_m0/ac6/example_build/sample_threadx/exceptions.c
@@ -1,7 +1,7 @@
/*
** Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
** Use, modification and redistribution of this file is subject to your possession of a
-** valid End User License Agreement for the Arm Product of which these examples are part of
+** valid End User License Agreement for the Arm Product of which these examples are part of
** and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.c
index f400736a2..01f48910d 100644
--- a/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.scat
index 8578282d7..7e806ce37 100644
--- a/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_m0/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -3,7 +3,7 @@
;*******************************************************
; Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_m0/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_m0/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 5786976df..f7e3eb2da 100644
--- a/ports/cortex_m0/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_m0/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -67,12 +67,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
diff --git a/ports/cortex_m0/ac6/example_build/tx/.cproject b/ports/cortex_m0/ac6/example_build/tx/.cproject
index f42008601..84b4712cb 100644
--- a/ports/cortex_m0/ac6/example_build/tx/.cproject
+++ b/ports/cortex_m0/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m0/ac6/inc/tx_port.h b/ports/cortex_m0/ac6/inc/tx_port.h
index de4ec330f..9c9e64704 100644
--- a/ports/cortex_m0/ac6/inc/tx_port.h
+++ b/ports/cortex_m0/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,18 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -64,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -130,7 +119,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -141,8 +130,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -181,7 +170,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -195,13 +184,13 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -215,11 +204,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -227,8 +216,8 @@ ULONG _tx_misra_time_stamp_get(VOID);
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -256,7 +245,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
@@ -285,9 +274,9 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
@@ -338,7 +327,7 @@ unsigned int interrupt_save;
interrupt_save = __get_primask_value();
__enable_interrupts();
__restore_interrupts(interrupt_save);
- }
+ }
}
@@ -365,8 +354,8 @@ unsigned int interrupt_save;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M0/AC6 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M0/AC6 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_m0/ac6/readme_threadx.txt b/ports/cortex_m0/ac6/readme_threadx.txt
index a84dfa256..2a3f56f98 100644
--- a/ports/cortex_m0/ac6/readme_threadx.txt
+++ b/ports/cortex_m0/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M0
+ Microsoft's Azure RTOS ThreadX for Cortex-M0
Using ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -22,27 +22,27 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
MPS2_Cortex_M0 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-m0_tx.launch' file, click
'Debug As', and then click 'cortex-m0_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-M0 using AC6 tools uses the standard AC6
+The entry point in ThreadX for the Cortex-M0 using AC6 tools uses the standard AC6
Cortex-M0 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -51,11 +51,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M0 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r8
0x04 r9
@@ -77,29 +77,29 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
6. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
-you can change the build_threadx.bat file to remove the -g option and enable
-all compiler optimizations.
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
+you can change the build_threadx.bat file to remove the -g option and enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M0
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-M0 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
7.2 Managed Interrupts
@@ -125,7 +125,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -137,8 +137,8 @@ your_assembly_isr:
Note: the Cortex-M0 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
diff --git a/ports/cortex_m0/ac6/src/tx_thread_context_restore.S b/ports/cortex_m0/ac6/src/tx_thread_context_restore.S
index a2aedaf06..cf90182f6 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -23,7 +23,7 @@
#include "tx_user.h"
#endif
@
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
.global _tx_execution_isr_exit
#endif
.global _tx_thread_system_state
@@ -73,14 +73,6 @@
@/* */
@/* ISRs Interrupt Service Routines */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@{
diff --git a/ports/cortex_m0/ac6/src/tx_thread_context_save.S b/ports/cortex_m0/ac6/src/tx_thread_context_save.S
index 0a00a628b..f2d4f0316 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -23,7 +23,7 @@
#include "tx_user.h"
#endif
@
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
.global _tx_execution_isr_enter
#endif
.global _tx_thread_system_state
@@ -67,14 +67,6 @@
@/* */
@/* ISRs */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@{
@@ -82,7 +74,7 @@
.thumb_func
_tx_thread_context_save:
@
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
/* Call the ISR enter function to indicate an ISR is starting. */
PUSH {r0, lr} // Save return address
BL _tx_execution_isr_enter // Call the ISR enter function
diff --git a/ports/cortex_m0/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m0/ac6/src/tx_thread_interrupt_control.S
index 766b740e2..5ce46db8d 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -58,14 +58,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* UINT _tx_thread_interrupt_control(UINT new_posture)
{ */
diff --git a/ports/cortex_m0/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m0/ac6/src/tx_thread_interrupt_disable.S
index 7aa32ba83..be91372b6 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -57,14 +57,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* UINT _tx_thread_interrupt_disable(VOID)
{ */
diff --git a/ports/cortex_m0/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m0/ac6/src/tx_thread_interrupt_restore.S
index 5e61de270..5094b31df 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -58,14 +58,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* VOID _tx_thread_interrupt_restore(UINT old_posture)
{ */
diff --git a/ports/cortex_m0/ac6/src/tx_thread_schedule.S b/ports/cortex_m0/ac6/src/tx_thread_schedule.S
index 0bb819045..552da6ab0 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -27,7 +27,7 @@
.global _tx_thread_execute_ptr
.global _tx_timer_time_slice
.global _tx_thread_system_stack_ptr
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
.global _tx_execution_thread_enter
.global _tx_execution_thread_exit
#endif
@@ -74,17 +74,6 @@
@/* _tx_thread_system_return Return to system from thread */
@/* _tx_thread_context_restore Restore thread's context */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-02-2021 Scott Larson Modified comment(s), add */
-@/* low power code, */
-@/* resulting in version 6.1.5 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@{
@@ -139,7 +128,7 @@ __tx_SVCallHandler:
.thumb_func
__tx_ts_handler:
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
@
@ /* Call the thread exit function to indicate the thread is no longer executing. */
@
@@ -222,7 +211,7 @@ __tx_ts_restore:
@
STR r5, [r4] @ Setup global time-slice
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
@
@ /* Call the thread entry function to indicate the thread is executing. */
@
diff --git a/ports/cortex_m0/ac6/src/tx_thread_stack_build.S b/ports/cortex_m0/ac6/src/tx_thread_stack_build.S
index 6a7575300..7621d9b76 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -59,14 +59,6 @@
@/* */
@/* _tx_thread_create Create thread service */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@{
diff --git a/ports/cortex_m0/ac6/src/tx_thread_system_return.S b/ports/cortex_m0/ac6/src/tx_thread_system_return.S
index 009b72107..fc62c0c63 100644
--- a/ports/cortex_m0/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m0/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -59,14 +59,6 @@
@/* */
@/* ThreadX components */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* VOID _tx_thread_system_return(VOID)
@{ */
diff --git a/ports/cortex_m0/ac6/src/tx_timer_interrupt.S b/ports/cortex_m0/ac6/src/tx_timer_interrupt.S
index f45ebfde6..016085326 100644
--- a/ports/cortex_m0/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m0/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -72,14 +72,6 @@
@/* */
@/* interrupt vector */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@{
diff --git a/ports/cortex_m0/gnu/example_build/cortexm0_crt0.S b/ports/cortex_m0/gnu/example_build/cortexm0_crt0.S
index bb530ac5a..070871a3c 100644
--- a/ports/cortex_m0/gnu/example_build/cortexm0_crt0.S
+++ b/ports/cortex_m0/gnu/example_build/cortexm0_crt0.S
@@ -63,7 +63,7 @@ crt0_ctor_loop:
beq crt0_ctor_end
ldr r2, [r0]
add r0, #4
- push {r0-r1}
+ push {r0-r1}
blx r2
pop {r0-r1}
b crt0_ctor_loop
@@ -83,7 +83,7 @@ start:
/* when main returns, loop forever. */
crt0_exit_loop:
b crt0_exit_loop
-
+
/* Startup helper functions. */
@@ -116,4 +116,3 @@ memory_set_done:
.section .stack, "wa", %nobits
.section .stack_process, "wa", %nobits
.section .heap, "wa", %nobits
-
\ No newline at end of file
diff --git a/ports/cortex_m0/gnu/example_build/cortexm0_vectors.S b/ports/cortex_m0/gnu/example_build/cortexm0_vectors.S
index 6ae558e4d..dc8d0aadb 100644
--- a/ports/cortex_m0/gnu/example_build/cortexm0_vectors.S
+++ b/ports/cortex_m0/gnu/example_build/cortexm0_vectors.S
@@ -4,8 +4,8 @@
.global __tx_BadHandler
.global __tx_SVCallHandler
.global __tx_DBGHandler
- .global __tx_PendSVHandler
- .global __tx_SysTickHandler
+ .global __tx_PendSVHandler
+ .global __tx_SysTickHandler
.global __tx_BadHandler
.syntax unified
@@ -15,9 +15,9 @@
.global _vectors
_vectors:
- .word __stack_end__
- .word reset_handler
- .word __tx_NMIHandler
+ .word __stack_end__
+ .word reset_handler
+ .word __tx_NMIHandler
.word __tx_HardfaultHandler
.word __tx_BadHandler
.word __tx_BadHandler
@@ -29,7 +29,7 @@ _vectors:
.word __tx_SVCallHandler //_SVC_Handler - used by Threadx scheduler //
.word __tx_DBGHandler
.word 0 // Reserved
- .word __tx_PendSVHandler
+ .word __tx_PendSVHandler
.word __tx_SysTickHandler // Used by Threadx timer functionality
.word __tx_BadHandler // Populate with user Interrupt handler
.word __tx_BadHandler
diff --git a/ports/cortex_m0/gnu/example_build/sample_threadx.c b/ports/cortex_m0/gnu/example_build/sample_threadx.c
index f400736a2..01f48910d 100644
--- a/ports/cortex_m0/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_m0/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -83,42 +83,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -126,23 +126,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -245,11 +245,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -308,7 +308,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -361,7 +361,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m0/gnu/example_build/sample_threadx.ld b/ports/cortex_m0/gnu/example_build/sample_threadx.ld
index c65a13464..3f19c29e0 100644
--- a/ports/cortex_m0/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_m0/gnu/example_build/sample_threadx.ld
@@ -10,7 +10,7 @@ __HEAPSIZE__ = 128;
SECTIONS
{
- .vectors :
+ .vectors :
{
KEEP(*(.vectors .vectors.*))
} > FLASH
@@ -45,7 +45,7 @@ SECTIONS
KEEP(*(.eh_frame*))
} > FLASH
- .ARM.extab :
+ .ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
@@ -59,7 +59,7 @@ SECTIONS
__data_load_start__ = ALIGN (4);
- .data : AT (__data_load_start__)
+ .data : AT (__data_load_start__)
{
__data_start__ = .;
@@ -89,7 +89,7 @@ SECTIONS
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
-
+
__data_end__ = .;
} > RAM
@@ -104,7 +104,7 @@ SECTIONS
__bss_end__ = .;
} > RAM
-
+
.heap (COPY):
{
__heap_start__ = ALIGN(4);
diff --git a/ports/cortex_m0/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_m0/gnu/example_build/tx_initialize_low_level.S
index fe7600773..e9dfb3297 100644
--- a/ports/cortex_m0/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m0/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -79,16 +79,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 Scott Larson Modified comment(s), and */
-@/* commented out code for */
-@/* enabling DWT, */
-@/* resulting in version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
@@ -101,10 +91,10 @@ _tx_initialize_low_level:
CPSID i
@
@ /* Set base of available memory to end of non-initialised RAM area. */
-@
+@
LDR r0, =_tx_initialize_unused_memory @ Build address of unused memory pointer
- LDR r1, =__RAM_segment_used_end__ @ Build first free address
- ADDS r1, r1, #4 @
+ LDR r1, =__RAM_segment_used_end__ @ Build first free address
+ ADDS r1, r1, #4 @
STR r1, [r0] @ Setup first unused memory pointer
@
@ /* Enable the cycle count register. */
@@ -113,15 +103,15 @@ _tx_initialize_low_level:
@ LDR r1, [r0] @ Pickup the current value
@ MOVS r2, #1
@ ORRS r1, r1, r2 @ Set the CYCCNTENA bit
-@ STR r1, [r0] @ Enable the cycle count register
+@ STR r1, [r0] @ Enable the cycle count register
@
@ /* Setup Vector Table Offset Register. */
-@
+@
LDR r0, =0xE000E000 @ Build address of NVIC registers
LDR r2, =0xD08 @ Offset to vector base register
ADD r0, r0, r2 @ Build vector base register
LDR r1, =_vectors @ Pickup address of vector table
- STR r1, [r0] @ Set vector table address
+ STR r1, [r0] @ Set vector table address
@
@ /* Set system stack pointer from vector value. */
@
@@ -143,18 +133,18 @@ _tx_initialize_low_level:
LDR r1, =0x00000000 // Rsrv, UsgF, BusF, MemM
LDR r0, =0xE000E000 // Build address of NVIC registers
LDR r2, =0xD18 //
- ADD r0, r0, r2 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 4-7 Priority Registers
LDR r1, =0xFF000000 // SVCl, Rsrv, Rsrv, Rsrv
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD1C //
- ADD r0, r0, r2 //
+ LDR r2, =0xD1C //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 8-11 Priority Registers
// Note: SVC must be lowest priority, which is 0xFF
LDR r1, =0x40FF0000 // SysT, PnSV, Rsrv, DbgM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD20 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD20 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 12-15 Priority Registers
// Note: PnSV must be lowest priority, which is 0xFF
diff --git a/ports/cortex_m0/gnu/inc/tx_port.h b/ports/cortex_m0/gnu/inc/tx_port.h
index 0f56ca737..9b315869f 100644
--- a/ports/cortex_m0/gnu/inc/tx_port.h
+++ b/ports/cortex_m0/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,20 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified comment(s), */
-/* resulting in version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -66,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -132,7 +119,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -143,8 +130,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -183,7 +170,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -197,13 +184,13 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -217,11 +204,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -229,8 +216,8 @@ ULONG _tx_misra_time_stamp_get(VOID);
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -258,7 +245,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
@@ -287,9 +274,9 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
@@ -340,7 +327,7 @@ unsigned int interrupt_save;
interrupt_save = __get_primask_value();
__enable_interrupts();
__restore_interrupts(interrupt_save);
- }
+ }
}
@@ -367,8 +354,8 @@ unsigned int interrupt_save;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M0/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M0/GNU Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_m0/gnu/readme_threadx.txt b/ports/cortex_m0/gnu/readme_threadx.txt
index 6ef8a0284..d7f00f6da 100644
--- a/ports/cortex_m0/gnu/readme_threadx.txt
+++ b/ports/cortex_m0/gnu/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M0
+ Microsoft's Azure RTOS ThreadX for Cortex-M0
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-gnu (GNU) compiler. At this point you may run the build_threadx.bat batch file.
-This will build the ThreadX run-time environment in the "example_build"
-directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+gnu (GNU) compiler. At this point you may run the build_threadx.bat batch file.
+This will build the ThreadX run-time environment in the "example_build"
+directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -21,25 +21,25 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute on Cortex-M0 evaluation boards
or on a dedicated simulator.
-Building the demonstration is easy, simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy, simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a binary
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a binary
file that can be downloaded and executed on the a simulator, or downloaded to a board.
3. System Initialization
-The entry point in ThreadX for the Cortex-M0 using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M0 using gnu tools uses the standard GNU
Cortex-M0 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -48,11 +48,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M0 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r8
0x04 r9
@@ -74,29 +74,29 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
-you can change the build_threadx.bat file to remove the -g option and enable
-all compiler optimizations.
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
+you can change the build_threadx.bat file to remove the -g option and enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M0
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M0 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
@@ -122,7 +122,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -134,8 +134,8 @@ your_assembly_isr:
Note: the Cortex-M0 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
@@ -151,7 +151,7 @@ information associated with this specific port of ThreadX:
03-02-2021 The following files were changed/added for version 6.1.5:
tx_thread_schedule.s Added low power feature
-09-30-2020 ThreadX update of Cortex-M0/GNU port. The following files were
+09-30-2020 ThreadX update of Cortex-M0/GNU port. The following files were
changed/added for port specific version 6.1:
tx_initialize_low_level.S Comment out DWT code.
diff --git a/ports/cortex_m0/gnu/src/tx_thread_context_restore.S b/ports/cortex_m0/gnu/src/tx_thread_context_restore.S
index 8222f9dea..968548671 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -31,7 +31,7 @@
.global _tx_thread_schedule
.global _tx_thread_preempt_disable
.global _tx_execution_isr_exit
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
.global _tx_execution_isr_exit
#endif
@
@@ -74,17 +74,6 @@
@/* */
@/* ISRs Interrupt Service Routines */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 Scott Larson Modified comment(s), and */
-@/* cleaned up whitespace, */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@{
diff --git a/ports/cortex_m0/gnu/src/tx_thread_context_save.S b/ports/cortex_m0/gnu/src/tx_thread_context_save.S
index c7c6a1423..9866da139 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -65,17 +65,6 @@
@/* */
@/* ISRs */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 Scott Larson Modified comment(s), and */
-@/* cleaned up whitespace, */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@{
@@ -83,7 +72,7 @@
.thumb_func
_tx_thread_context_save:
@
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
/* Call the ISR enter function to indicate an ISR is starting. */
PUSH {r0, lr} // Save return address
BL _tx_execution_isr_enter // Call the ISR enter function
@@ -91,6 +80,6 @@ _tx_thread_context_save:
#endif
/* Context is already saved - just return. */
-
+
BX lr
@}
diff --git a/ports/cortex_m0/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m0/gnu/src/tx_thread_interrupt_control.S
index 3fc8cc231..cc79fb79c 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -58,16 +58,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* UINT _tx_thread_interrupt_control(UINT new_posture)
{ */
diff --git a/ports/cortex_m0/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m0/gnu/src/tx_thread_interrupt_disable.S
index fd3a0ae85..126893d40 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -57,16 +57,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* UINT _tx_thread_interrupt_disable(VOID)
{ */
diff --git a/ports/cortex_m0/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m0/gnu/src/tx_thread_interrupt_restore.S
index 41c5dd210..567ae747d 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@@ -58,16 +58,6 @@
@/* */
@/* Application Code */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* VOID _tx_thread_interrupt_restore(UINT old_posture)
{ */
diff --git a/ports/cortex_m0/gnu/src/tx_thread_schedule.S b/ports/cortex_m0/gnu/src/tx_thread_schedule.S
index 46d9f8ba4..21b6118a3 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -72,19 +72,6 @@
@/* _tx_thread_system_return Return to system from thread */
@/* _tx_thread_context_restore Restore thread's context */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-02-2021 Scott Larson Modified comment(s), add */
-@/* low power code, */
-@/* resulting in version 6.1.5 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@{
@@ -139,7 +126,7 @@ __tx_SVCallHandler:
.thumb_func
__tx_ts_handler:
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
@
@ /* Call the thread exit function to indicate the thread is no longer executing. */
@
@@ -222,7 +209,7 @@ __tx_ts_restore:
@
STR r5, [r4] @ Setup global time-slice
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
@
@ /* Call the thread entry function to indicate the thread is executing. */
@
diff --git a/ports/cortex_m0/gnu/src/tx_thread_stack_build.S b/ports/cortex_m0/gnu/src/tx_thread_stack_build.S
index fee960e37..deef33ddf 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -59,20 +59,6 @@
@/* */
@/* _tx_thread_create Create thread service */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified Comment(s), setting */
-@/* R10 to top of stack is not */
-@/* needed. Removed references */
-@/* to stack frame, clean up */
-@/* whitespace, resulting */
-@/* in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@{
diff --git a/ports/cortex_m0/gnu/src/tx_thread_system_return.S b/ports/cortex_m0/gnu/src/tx_thread_system_return.S
index cef9159fe..d798994ea 100644
--- a/ports/cortex_m0/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m0/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -59,16 +59,6 @@
@/* */
@/* ThreadX components */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@/* VOID _tx_thread_system_return(VOID)
@{ */
diff --git a/ports/cortex_m0/gnu/src/tx_timer_interrupt.S b/ports/cortex_m0/gnu/src/tx_timer_interrupt.S
index 3b64e055b..434edc601 100644
--- a/ports/cortex_m0/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m0/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -72,16 +72,6 @@
@/* */
@/* interrupt vector */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified comment(s), */
-@/* resulting in version 6.1 */
-@/* 03-08-2023 Scott Larson Include tx_user.h, */
-@/* resulting in version 6.2.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@{
diff --git a/ports/cortex_m0/iar/CMakeLists.txt b/ports/cortex_m0/iar/CMakeLists.txt
index a524d79f0..57be3aebc 100644
--- a/ports/cortex_m0/iar/CMakeLists.txt
+++ b/ports/cortex_m0/iar/CMakeLists.txt
@@ -7,7 +7,7 @@ target_sources(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_disable.S
- ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
diff --git a/ports/cortex_m0/iar/example_build/cstartup_M.s b/ports/cortex_m0/iar/example_build/cstartup_M.s
index a498443ce..3ae600b5b 100644
--- a/ports/cortex_m0/iar/example_build/cstartup_M.s
+++ b/ports/cortex_m0/iar/example_build/cstartup_M.s
@@ -2,16 +2,16 @@
PUBLIC __vector_table
SECTION .text:CODE:REORDER(1)
-
+
;; Keep vector table even if it's not referenced
REQUIRE __vector_table
-
+
THUMB
-
+
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
-
+
DATA
__vector_table
@@ -53,7 +53,7 @@ __vector_table
__Reset_Vector:
CPSID i ; Disable interrupts
LDR r0, =__iar_program_start
- BX r0
+ BX r0
NMI_Handler
HardFault_Handler
diff --git a/ports/cortex_m0/iar/example_build/sample_threadx.c b/ports/cortex_m0/iar/example_build/sample_threadx.c
index 95ff3a475..8f1d97572 100644
--- a/ports/cortex_m0/iar/example_build/sample_threadx.c
+++ b/ports/cortex_m0/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,7 +85,7 @@ CHAR *pointer;
#ifdef TX_ENABLE_EVENT_TRACE
tx_trace_enable(trace_buffer, sizeof(trace_buffer), 32);
#endif
-
+
/* Create a byte memory pool from which to allocate the thread stacks. */
tx_byte_pool_create(&byte_pool_0, "byte pool 0", byte_pool_memory, DEMO_BYTE_POOL_SIZE);
@@ -96,42 +96,42 @@ CHAR *pointer;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -139,23 +139,23 @@ CHAR *pointer;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -258,11 +258,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -321,7 +321,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -374,7 +374,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m0/iar/example_build/tx_initialize_low_level.s b/ports/cortex_m0/iar/example_build/tx_initialize_low_level.s
index 19469eae1..cec6e9b2b 100644
--- a/ports/cortex_m0/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m0/iar/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -74,12 +74,6 @@ __tx_free_memory_start
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m0/iar/inc/tx_port.h b/ports/cortex_m0/iar/inc/tx_port.h
index 76e6abca4..af5f58bb8 100644
--- a/ports/cortex_m0/iar/inc/tx_port.h
+++ b/ports/cortex_m0/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,18 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -64,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -117,7 +106,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -128,8 +117,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -168,7 +157,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -182,17 +171,17 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +195,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -220,23 +209,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -265,7 +254,7 @@ void __iar_Initlocks(void);
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | __get_IPSR())
@@ -282,19 +271,19 @@ ULONG _tx_misra_ipsr_get(VOID);
zero after initialization for Cortex-M ports. */
#ifndef TX_THREAD_SYSTEM_RETURN_CHECK
-#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
+#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -348,8 +337,8 @@ __istate_t interrupt_save;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M0/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M0/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m0/iar/readme_threadx.txt b/ports/cortex_m0/iar/readme_threadx.txt
index 580a07364..2d255bfab 100644
--- a/ports/cortex_m0/iar/readme_threadx.txt
+++ b/ports/cortex_m0/iar/readme_threadx.txt
@@ -1,14 +1,14 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M0
+ Microsoft's Azure RTOS ThreadX for Cortex-M0
Using the IAR Tools
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -18,31 +18,31 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-M0 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-M0 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M0 using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M0 using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup_M.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -51,54 +51,54 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M0 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 LR Interrupted LR (LR at time of PENDSV)
- 0x04 r4
- 0x08 r5
- 0x0C r6
- 0x10 r7
- 0x14 r8
- 0x18 r9
- 0x1C r10 (sl)
- 0x20 r11
+ 0x04 r4
+ 0x08 r5
+ 0x0C r6
+ 0x10 r7
+ 0x14 r8
+ 0x18 r9
+ 0x1C r10 (sl)
+ 0x20 r11
0x24 r0 (Hardware stack starts here!!)
- 0x28 r1
- 0x2C r2
- 0x30 r3
- 0x34 r12
- 0x38 lr
- 0x3C pc
- 0x40 xPSR
+ 0x28 r1
+ 0x2C r2
+ 0x30 r3
+ 0x34 r12
+ 0x38 lr
+ 0x3C pc
+ 0x40 xPSR
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M3
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
-The Cortex-M3 vectors start at the label __vector_table and is defined in cstartup_M.s.
+The Cortex-M3 vectors start at the label __vector_table and is defined in cstartup_M.s.
The application may modify the vector area according to its needs.
@@ -138,7 +138,7 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
diff --git a/ports/cortex_m0/iar/src/tx_iar.c b/ports/cortex_m0/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m0/iar/src/tx_iar.c
+++ b/ports/cortex_m0/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m0/iar/src/tx_thread_context_restore.s b/ports/cortex_m0/iar/src/tx_thread_context_restore.s
index b2fb81627..3bd0af0cd 100644
--- a/ports/cortex_m0/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m0/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -67,19 +67,13 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
PUBLIC _tx_thread_context_restore
_tx_thread_context_restore:
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR exit function to indicate an ISR is complete. */
;
diff --git a/ports/cortex_m0/iar/src/tx_thread_context_save.s b/ports/cortex_m0/iar/src/tx_thread_context_save.s
index 9463b229c..1d4d5a1ba 100644
--- a/ports/cortex_m0/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m0/iar/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -61,18 +61,12 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
PUBLIC _tx_thread_context_save
_tx_thread_context_save:
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR enter function to indicate an ISR is starting. */
;
diff --git a/ports/cortex_m0/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m0/iar/src/tx_thread_interrupt_control.s
index 01fbb1948..261b1c614 100644
--- a/ports/cortex_m0/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m0/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -53,12 +53,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/cortex_m0/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m0/iar/src/tx_thread_interrupt_disable.s
index f64aff1fb..3c508fa6a 100644
--- a/ports/cortex_m0/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m0/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -53,12 +53,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(UINT new_posture)
;{
diff --git a/ports/cortex_m0/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m0/iar/src/tx_thread_interrupt_restore.s
index b08efc47a..5d76a72e8 100644
--- a/ports/cortex_m0/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m0/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -53,12 +53,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_interrupt_restore(UINT new_posture)
;{
diff --git a/ports/cortex_m0/iar/src/tx_thread_schedule.s b/ports/cortex_m0/iar/src/tx_thread_schedule.s
index b5f05400f..8458193e1 100644
--- a/ports/cortex_m0/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m0/iar/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -69,15 +69,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-02-2021 Scott Larson Modified comment(s), add */
-;/* low power code, */
-;/* resulting in version 6.1.5 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
@@ -123,7 +114,7 @@ __tx_PendSVHandler:
;
__tx_ts_handler:
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
;
@@ -207,7 +198,7 @@ __tx_ts_restore:
;
STR r5, [r4] ; Setup global time-slice
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread entry function to indicate the thread is executing. */
;
diff --git a/ports/cortex_m0/iar/src/tx_thread_stack_build.s b/ports/cortex_m0/iar/src/tx_thread_stack_build.s
index 508ccc6dd..6c7005855 100644
--- a/ports/cortex_m0/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m0/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -55,12 +55,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/cortex_m0/iar/src/tx_thread_system_return.s b/ports/cortex_m0/iar/src/tx_thread_system_return.s
index 8a8787834..da8a481ea 100644
--- a/ports/cortex_m0/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m0/iar/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -55,12 +55,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/cortex_m0/iar/src/tx_timer_interrupt.s b/ports/cortex_m0/iar/src/tx_timer_interrupt.s
index 8e163a891..25774db70 100644
--- a/ports/cortex_m0/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m0/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,12 +71,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/cortex_m0/keil/example_build/sample_threadx.c b/ports/cortex_m0/keil/example_build/sample_threadx.c
index 4d95c2eda..dd5ee1554 100644
--- a/ports/cortex_m0/keil/example_build/sample_threadx.c
+++ b/ports/cortex_m0/keil/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m0/keil/example_build/tx_initialize_low_level.s b/ports/cortex_m0/keil/example_build/tx_initialize_low_level.s
index f1a83341a..b16b3e200 100644
--- a/ports/cortex_m0/keil/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m0/keil/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -120,12 +120,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m0/keil/inc/tx_port.h b/ports/cortex_m0/keil/inc/tx_port.h
index e2d40a625..f163f1c64 100644
--- a/ports/cortex_m0/keil/inc/tx_port.h
+++ b/ports/cortex_m0/keil/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,18 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -64,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -113,7 +102,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -124,8 +113,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -164,7 +153,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -178,13 +167,13 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -198,11 +187,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -210,10 +199,10 @@ ULONG _tx_misra_time_stamp_get(VOID);
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
-#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
#ifndef TX_MISRA_ENABLE
@@ -246,7 +235,7 @@ register unsigned int _ipsr __asm("ipsr");
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | _ipsr)
@@ -263,19 +252,19 @@ ULONG _tx_misra_ipsr_get(VOID);
zero after initialization for Cortex-M ports. */
#ifndef TX_THREAD_SYSTEM_RETURN_CHECK
-#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
+#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -322,8 +311,8 @@ unsigned int was_masked;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M0/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M0/AC5 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m0/keil/readme_threadx.txt b/ports/cortex_m0/keil/readme_threadx.txt
index b1c1c0fd6..e58cf259e 100644
--- a/ports/cortex_m0/keil/readme_threadx.txt
+++ b/ports/cortex_m0/keil/readme_threadx.txt
@@ -1,32 +1,32 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M0
+ Microsoft's Azure RTOS ThreadX for Cortex-M0
Using ARM Compiler 5 (AC5) and Keil Microcontroller Development Kit
1. Building the ThreadX run-time Library
-Building the ThreadX library is easy, simply load the project file
-tx.uvprojx, which is located inside the "example_build" directory.
+Building the ThreadX library is easy, simply load the project file
+tx.uvprojx, which is located inside the "example_build" directory.
Once the ThreadX library files are displayed in the project window,
select the "Build Target" operation and observe the compilation and assembly
-of the ThreadX library. This project build produces the ThreadX library
+of the ThreadX library. This project build produces the ThreadX library
file tx.lib.
2. Demonstration System
The ThreadX demonstration is designed to execute under the Keil simulator or
-Cortex-M0 hardware. This demonstration is slightly smaller than typical ThreadX
+Cortex-M0 hardware. This demonstration is slightly smaller than typical ThreadX
demonstrations, and thus requires less than 7KB of Flash and less than 4KB of RAM.
-Building the demonstration is easy; simply open the ThreadX demonstration
-project file sample_threadx.uvprojx, which is located inside the "example_build"
-directory.
+Building the demonstration is easy; simply open the ThreadX demonstration
+project file sample_threadx.uvprojx, which is located inside the "example_build"
+directory.
-Once open, select the "Build Target" operation and observe the compilation of
-sample_threadx.c (which is the demonstration application) and linking with
+Once open, select the "Build Target" operation and observe the compilation of
+sample_threadx.c (which is the demonstration application) and linking with
tx.lib. The resulting file sample_threadx.axf is a binary file that can be downloaded
-and executed under the uVision simulator or Cortex-M0 hardware.
+and executed under the uVision simulator or Cortex-M0 hardware.
For simulator execution, the following memory regions need to be defined via
the "Debug -> Memory Map" dialog:
@@ -37,17 +37,17 @@ the "Debug -> Memory Map" dialog:
3. System Initialization
-The entry point in ThreadX for the Cortex-M0 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M0 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -56,11 +56,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M0 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r8
0x04 r9
@@ -82,21 +82,21 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M0
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
diff --git a/ports/cortex_m0/keil/src/tx_thread_context_restore.s b/ports/cortex_m0/keil/src/tx_thread_context_restore.s
index 15e742698..6723cd199 100644
--- a/ports/cortex_m0/keil/src/tx_thread_context_restore.s
+++ b/ports/cortex_m0/keil/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -20,10 +20,10 @@
;/**************************************************************************/
;
;
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_isr_exit
#endif
-
+
;
AREA ||.text||, CODE, READONLY
PRESERVE8
@@ -62,19 +62,13 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
EXPORT _tx_thread_context_restore
_tx_thread_context_restore
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR exit function to indicate an ISR is complete. */
;
diff --git a/ports/cortex_m0/keil/src/tx_thread_context_save.s b/ports/cortex_m0/keil/src/tx_thread_context_save.s
index 3245b5126..d0c2c9e49 100644
--- a/ports/cortex_m0/keil/src/tx_thread_context_save.s
+++ b/ports/cortex_m0/keil/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -20,7 +20,7 @@
;/**************************************************************************/
;
;
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_isr_enter
#endif
;
@@ -61,18 +61,12 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
EXPORT _tx_thread_context_save
_tx_thread_context_save
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the ISR enter function to indicate an ISR is executing. */
;
diff --git a/ports/cortex_m0/keil/src/tx_thread_interrupt_control.s b/ports/cortex_m0/keil/src/tx_thread_interrupt_control.s
index a8504791c..be0da62d3 100644
--- a/ports/cortex_m0/keil/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m0/keil/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/cortex_m0/keil/src/tx_thread_interrupt_disable.s b/ports/cortex_m0/keil/src/tx_thread_interrupt_disable.s
index aac316ea8..86ab45622 100644
--- a/ports/cortex_m0/keil/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m0/keil/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(UINT new_posture)
;{
diff --git a/ports/cortex_m0/keil/src/tx_thread_interrupt_restore.s b/ports/cortex_m0/keil/src/tx_thread_interrupt_restore.s
index b94b9e7bd..8e71728af 100644
--- a/ports/cortex_m0/keil/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m0/keil/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_interrupt_restore(UINT new_posture)
;{
diff --git a/ports/cortex_m0/keil/src/tx_thread_schedule.s b/ports/cortex_m0/keil/src/tx_thread_schedule.s
index f9fa81847..f900848bc 100644
--- a/ports/cortex_m0/keil/src/tx_thread_schedule.s
+++ b/ports/cortex_m0/keil/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -25,7 +25,7 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_system_stack_ptr
IMPORT _tx_thread_preempt_disable
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
IMPORT _tx_execution_thread_enter
IMPORT _tx_execution_thread_exit
#endif
@@ -71,15 +71,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-02-2021 Scott Larson Modified comment(s), add */
-;/* low power code, */
-;/* resulting in version 6.1.5 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
@@ -126,7 +117,7 @@ __tx_PendSVHandler
;
__tx_ts_handler
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread exit function to indicate the thread is no longer executing. */
;
@@ -210,7 +201,7 @@ __tx_ts_restore
;
STR r5, [r4] ; Setup global time-slice
-#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
;
; /* Call the thread entry function to indicate the thread is executing. */
;
diff --git a/ports/cortex_m0/keil/src/tx_thread_stack_build.s b/ports/cortex_m0/keil/src/tx_thread_stack_build.s
index 8324238ab..e1cf9d162 100644
--- a/ports/cortex_m0/keil/src/tx_thread_stack_build.s
+++ b/ports/cortex_m0/keil/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/cortex_m0/keil/src/tx_thread_system_return.s b/ports/cortex_m0/keil/src/tx_thread_system_return.s
index d37623fce..db1ab63d3 100644
--- a/ports/cortex_m0/keil/src/tx_thread_system_return.s
+++ b/ports/cortex_m0/keil/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/cortex_m0/keil/src/tx_timer_interrupt.s b/ports/cortex_m0/keil/src/tx_timer_interrupt.s
index e6ebbc76c..b712487f1 100644
--- a/ports/cortex_m0/keil/src/tx_timer_interrupt.s
+++ b/ports/cortex_m0/keil/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,12 +71,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/cortex_m23/ac6/example_build/ARMCM23_TZ_config.txt b/ports/cortex_m23/ac6/example_build/ARMCM23_TZ_config.txt
index 0d31ad76d..3ea82e17f 100644
--- a/ports/cortex_m23/ac6/example_build/ARMCM23_TZ_config.txt
+++ b/ports/cortex_m23/ac6/example_build/ARMCM23_TZ_config.txt
@@ -2,7 +2,7 @@
# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max]
#----------------------------------------------------------------------------------------------
cpu0.semihosting-enable=0 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false.
-idau.NUM_IDAU_REGION=0x0 # (int , init-time) default = '0xA' :
+idau.NUM_IDAU_REGION=0x0 # (int , init-time) default = '0xA' :
cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included
fvp_mps2.platform_type=0x0 # (int , init-time) default = '0x0' : 0:MPS2 ; 1:IoT Kit ; 2:Castor : [0x0..0x2]
fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic
diff --git a/ports/cortex_m23/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h b/ports/cortex_m23/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
index 476361d7b..66e03dff9 100644
--- a/ports/cortex_m23/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
+++ b/ports/cortex_m23/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'ThreadX_Library'
- * Target: 'ThreadX_Library_Project'
+ * Project: 'ThreadX_Library'
+ * Target: 'ThreadX_Library_Project'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM23_TZ.h"
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/Abstract.txt b/ports/cortex_m23/ac6/example_build/demo_secure_zone/Abstract.txt
index 0d1d8c52b..f2b8a8192 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/Abstract.txt
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/Abstract.txt
@@ -1,10 +1,10 @@
This ARM Cortex-M33 secure/non-secure example project that
-shows the setup of the CMSIS-RTOS2 RTX for TrustZone for
-ARMv8-M applications.
+shows the setup of the CMSIS-RTOS2 RTX for TrustZone for
+ARMv8-M applications.
The application uses CMSIS and can be executed on a Fixed
-Virtual Platform (FVP) simulation model. The application
-demonstrates three RTOS threads.
+Virtual Platform (FVP) simulation model. The application
+demonstrates three RTOS threads.
Secure application:
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
index 773836570..6988d132b 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
@@ -326,7 +326,7 @@
// <0=>Secure
// <1=>Non-Secure
// Value for SCB->ICSR register bit STTNS
-// only for single SysTick implementation
+// only for single SysTick implementation
*/
#define SCB_ICSR_STTNS_VAL 0
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/system_ARMCM23.c b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/system_ARMCM23.c
index cf78a4ede..a79cb61d5 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/system_ARMCM23.c
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM23_TZ/system_ARMCM23.c
@@ -77,7 +77,7 @@ void SystemInit (void)
#endif
SystemCoreClock = SYSTEM_CLOCK;
-
+
*(uint32_t *)0xE000ED24 = 0x000F0000; /* S: enable secure, usage, bus, mem faults */
*(uint32_t *)0xE002ED24 = 0x000F0000; /* NS: enable secure, usage, bus, mem faults */
}
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index a37b412e2..40fc81c1f 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM23_TZ.h"
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/interface.c b/ports/cortex_m23/ac6/example_build/demo_secure_zone/interface.c
index 4e6e8eeee..af6533c38 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/interface.c
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/interface.c
@@ -31,19 +31,19 @@
typedef funcptr funcptr_NS __attribute__((cmse_nonsecure_call));
/* Non-secure callable (entry) function */
-int func1(int x) __attribute__((cmse_nonsecure_entry)) {
- return x+3;
+int func1(int x) __attribute__((cmse_nonsecure_entry)) {
+ return x+3;
}
/* Non-secure callable (entry) function, calling a non-secure callback function */
int func2(funcptr callback, int x) __attribute__((cmse_nonsecure_entry)) {
funcptr_NS callback_NS; // non-secure callback function pointer
int y;
-
+
/* return function pointer with cleared LSB */
callback_NS = (funcptr_NS)cmse_nsfptr_create(callback);
-
+
y = callback_NS (x+1);
-
+
return (y+2);
}
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_ns.c b/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_ns.c
index 5d16e1bb2..31ca367cf 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_ns.c
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_ns.c
@@ -63,7 +63,7 @@ void ThreadA (void *argument) {
static int callbackB (int val) {
uint32_t flags;
-
+
flags = osThreadFlagsWait (1U, osFlagsWaitAny, osWaitForever);
if (flags == 1U) {
return (val+1);
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_s.c b/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_s.c
index 2c667821b..74fa242e4 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_s.c
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/main_s.c
@@ -24,36 +24,36 @@
* Title: Code template for secure main function
*
*---------------------------------------------------------------------------*/
-
+
/* Use CMSE intrinsics */
#include
#include
#include "RTE_Components.h"
#include CMSIS_device_header
-
+
/* TZ_START_NS: Start address of non-secure application */
#ifndef TZ_START_NS
#define TZ_START_NS (0x200000U)
#endif
-
+
/* typedef for non-secure callback functions */
typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
-
+
/* Secure main() */
int main(void) {
funcptr_void NonSecure_ResetHandler;
-
+
/* Add user setup code for secure part here*/
-
+
/* Set non-secure main stack (MSP_NS) */
__TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
-
+
/* Get non-secure reset handler */
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
-
+
/* Start non-secure state software application */
NonSecure_ResetHandler();
-
+
/* Non-secure software does not return, this code is not executed */
while (1) {
__NOP();
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/tx_secure_interface.h b/ports/cortex_m23/ac6/example_build/demo_secure_zone/tx_secure_interface.h
index b5a76bfbf..63f683c1c 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/tx_secure_interface.h
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m23/ac6/example_build/demo_secure_zone/tz_context.c b/ports/cortex_m23/ac6/example_build/demo_secure_zone/tz_context.c
index f31528909..ca7f0c56d 100644
--- a/ports/cortex_m23/ac6/example_build/demo_secure_zone/tz_context.c
+++ b/ports/cortex_m23/ac6/example_build/demo_secure_zone/tz_context.c
@@ -24,7 +24,7 @@
* Title: Context Management for ARMv8-M TrustZone - Sample implementation
*
*---------------------------------------------------------------------------*/
-
+
#include "RTE_Components.h"
#include CMSIS_device_header
#include "tz_context.h"
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
index e4871014a..d0f6b08ba 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
@@ -24,17 +24,17 @@
*
* -----------------------------------------------------------------------------
*/
-
+
#include "cmsis_compiler.h"
#include "rtx_os.h"
-
+
// OS Idle Thread
__WEAK __NO_RETURN void osRtxIdleThread (void *argument) {
(void)argument;
for (;;) {}
}
-
+
// OS Error Callback function
__WEAK uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
(void)object_id;
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
index 3021efbc8..49fc392ea 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
@@ -24,52 +24,52 @@
*
* -----------------------------------------------------------------------------
*/
-
+
#ifndef RTX_CONFIG_H_
#define RTX_CONFIG_H_
-
+
#ifdef _RTE_
#include "RTE_Components.h"
#ifdef RTE_RTX_CONFIG_H
#include RTE_RTX_CONFIG_H
#endif
#endif
-
+
//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
-
+
// System Configuration
// =======================
-
+
// Global Dynamic Memory size [bytes] <0-1073741824:8>
// Defines the combined global dynamic memory size.
// Default: 4096
#ifndef OS_DYNAMIC_MEM_SIZE
#define OS_DYNAMIC_MEM_SIZE 4096
#endif
-
+
// Kernel Tick Frequency [Hz] <1-1000000>
// Defines base time unit for delays and timeouts.
// Default: 1000 (1ms tick)
#ifndef OS_TICK_FREQ
#define OS_TICK_FREQ 1000
#endif
-
+
// Round-Robin Thread switching
// Enables Round-Robin Thread switching.
#ifndef OS_ROBIN_ENABLE
#define OS_ROBIN_ENABLE 1
#endif
-
+
// Round-Robin Timeout <1-1000>
// Defines how many ticks a thread will execute before a thread switch.
// Default: 5
#ifndef OS_ROBIN_TIMEOUT
#define OS_ROBIN_TIMEOUT 5
#endif
-
+
//
-
-// ISR FIFO Queue
+
+// ISR FIFO Queue
// <4=> 4 entries <8=> 8 entries <12=> 12 entries <16=> 16 entries
// <24=> 24 entries <32=> 32 entries <48=> 48 entries <64=> 64 entries
// <96=> 96 entries <128=> 128 entries <196=> 196 entries <256=> 256 entries
@@ -78,38 +78,38 @@
#ifndef OS_ISR_FIFO_QUEUE
#define OS_ISR_FIFO_QUEUE 16
#endif
-
+
// Object Memory usage counters
// Enables object memory usage counters (requires RTX source variant).
#ifndef OS_OBJ_MEM_USAGE
#define OS_OBJ_MEM_USAGE 0
#endif
-
+
//
-
+
// Thread Configuration
// =======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_THREAD_OBJ_MEM
#define OS_THREAD_OBJ_MEM 0
#endif
-
+
// Number of user Threads <1-1000>
// Defines maximum number of user threads that can be active at the same time.
// Applies to user threads with system provided memory for control blocks.
#ifndef OS_THREAD_NUM
#define OS_THREAD_NUM 1
#endif
-
+
// Number of user Threads with default Stack size <0-1000>
// Defines maximum number of user threads with default stack size.
// Applies to user threads with zero stack size specified.
#ifndef OS_THREAD_DEF_STACK_NUM
#define OS_THREAD_DEF_STACK_NUM 0
#endif
-
+
// Total Stack size [bytes] for user Threads with user-provided Stack size <0-1073741824:8>
// Defines the combined stack size for user threads with user-provided stack size.
// Applies to user threads with user-provided stack size and system provided memory for stack.
@@ -117,23 +117,23 @@
#ifndef OS_THREAD_USER_STACK_SIZE
#define OS_THREAD_USER_STACK_SIZE 0
#endif
-
+
//
-
+
// Default Thread Stack size [bytes] <96-1073741824:8>
// Defines stack size for threads with zero stack size specified.
// Default: 256
#ifndef OS_STACK_SIZE
#define OS_STACK_SIZE 256
#endif
-
+
// Idle Thread Stack size [bytes] <72-1073741824:8>
// Defines stack size for Idle thread.
// Default: 256
#ifndef OS_IDLE_THREAD_STACK_SIZE
#define OS_IDLE_THREAD_STACK_SIZE 256
#endif
-
+
// Idle Thread TrustZone Module Identifier
// Defines TrustZone Thread Context Management Identifier.
// Applies only to cores with TrustZone technology.
@@ -141,49 +141,49 @@
#ifndef OS_IDLE_THREAD_TZ_MOD_ID
#define OS_IDLE_THREAD_TZ_MOD_ID 0
#endif
-
+
// Stack overrun checking
// Enables stack overrun check at thread switch.
// Enabling this option increases slightly the execution time of a thread switch.
#ifndef OS_STACK_CHECK
#define OS_STACK_CHECK 1
#endif
-
+
// Stack usage watermark
// Initializes thread stack with watermark pattern for analyzing stack usage.
// Enabling this option increases significantly the execution time of thread creation.
#ifndef OS_STACK_WATERMARK
#define OS_STACK_WATERMARK 0
#endif
-
-// Processor mode for Thread execution
-// <0=> Unprivileged mode
+
+// Processor mode for Thread execution
+// <0=> Unprivileged mode
// <1=> Privileged mode
// Default: Privileged mode
#ifndef OS_PRIVILEGE_MODE
#define OS_PRIVILEGE_MODE 1
#endif
-
+
//
-
+
// Timer Configuration
// ======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_TIMER_OBJ_MEM
#define OS_TIMER_OBJ_MEM 0
#endif
-
+
// Number of Timer objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_TIMER_NUM
#define OS_TIMER_NUM 1
#endif
-
+
//
-
+
// Timer Thread Priority
// <8=> Low
// <16=> Below Normal <24=> Normal <32=> Above Normal
@@ -194,7 +194,7 @@
#ifndef OS_TIMER_THREAD_PRIO
#define OS_TIMER_THREAD_PRIO 40
#endif
-
+
// Timer Thread Stack size [bytes] <0-1073741824:8>
// Defines stack size for Timer thread.
// May be set to 0 when timers are not used.
@@ -202,7 +202,7 @@
#ifndef OS_TIMER_THREAD_STACK_SIZE
#define OS_TIMER_THREAD_STACK_SIZE 256
#endif
-
+
// Timer Thread TrustZone Module Identifier
// Defines TrustZone Thread Context Management Identifier.
// Applies only to cores with TrustZone technology.
@@ -210,7 +210,7 @@
#ifndef OS_TIMER_THREAD_TZ_MOD_ID
#define OS_TIMER_THREAD_TZ_MOD_ID 0
#endif
-
+
// Timer Callback Queue entries <0-256>
// Number of concurrent active timer callback functions.
// May be set to 0 when timers are not used.
@@ -218,85 +218,85 @@
#ifndef OS_TIMER_CB_QUEUE
#define OS_TIMER_CB_QUEUE 4
#endif
-
+
//
-
+
// Event Flags Configuration
// ============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_EVFLAGS_OBJ_MEM
#define OS_EVFLAGS_OBJ_MEM 0
#endif
-
+
// Number of Event Flags objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_EVFLAGS_NUM
#define OS_EVFLAGS_NUM 1
#endif
-
+
//
-
+
//
-
+
// Mutex Configuration
// ======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MUTEX_OBJ_MEM
#define OS_MUTEX_OBJ_MEM 0
#endif
-
+
// Number of Mutex objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MUTEX_NUM
#define OS_MUTEX_NUM 1
#endif
-
+
//
-
+
//
-
+
// Semaphore Configuration
// ==========================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_SEMAPHORE_OBJ_MEM
#define OS_SEMAPHORE_OBJ_MEM 0
#endif
-
+
// Number of Semaphore objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_SEMAPHORE_NUM
#define OS_SEMAPHORE_NUM 1
#endif
-
+
//
-
+
//
-
+
// Memory Pool Configuration
// ============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MEMPOOL_OBJ_MEM
#define OS_MEMPOOL_OBJ_MEM 0
#endif
-
+
// Number of Memory Pool objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MEMPOOL_NUM
#define OS_MEMPOOL_NUM 1
#endif
-
+
// Data Storage Memory size [bytes] <0-1073741824:8>
// Defines the combined data storage memory size.
// Applies to objects with system provided memory for data storage.
@@ -304,27 +304,27 @@
#ifndef OS_MEMPOOL_DATA_SIZE
#define OS_MEMPOOL_DATA_SIZE 0
#endif
-
+
//
-
+
//
-
+
// Message Queue Configuration
// ==============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MSGQUEUE_OBJ_MEM
#define OS_MSGQUEUE_OBJ_MEM 0
#endif
-
+
// Number of Message Queue objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MSGQUEUE_NUM
#define OS_MSGQUEUE_NUM 1
#endif
-
+
// Data Storage Memory size [bytes] <0-1073741824:8>
// Defines the combined data storage memory size.
// Applies to objects with system provided memory for data storage.
@@ -332,26 +332,26 @@
#ifndef OS_MSGQUEUE_DATA_SIZE
#define OS_MSGQUEUE_DATA_SIZE 0
#endif
-
+
//
-
+
//
-
+
// Event Recorder Configuration
// ===============================
-
+
// Global Initialization
// Initialize Event Recorder during 'osKernelInitialize'.
#ifndef OS_EVR_INIT
#define OS_EVR_INIT 0
#endif
-
+
// Start recording
// Start event recording after initialization.
#ifndef OS_EVR_START
#define OS_EVR_START 1
#endif
-
+
// Global Event Filter Setup
// Initial recording level applied to all components.
// Error events
@@ -362,11 +362,11 @@
#ifndef OS_EVR_LEVEL
#define OS_EVR_LEVEL 0x00U
#endif
-
+
// RTOS Event Filter Setup
// Recording levels for RTX components.
// Only applicable if events for the respective component are generated.
-
+
// Memory Management
// Recording level for Memory Management events.
// Error events
@@ -374,10 +374,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MEMORY_LEVEL
+#ifndef OS_EVR_MEMORY_LEVEL
#define OS_EVR_MEMORY_LEVEL 0x01U
#endif
-
+
// Kernel
// Recording level for Kernel events.
// Error events
@@ -385,10 +385,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_KERNEL_LEVEL
+#ifndef OS_EVR_KERNEL_LEVEL
#define OS_EVR_KERNEL_LEVEL 0x01U
#endif
-
+
// Thread
// Recording level for Thread events.
// Error events
@@ -396,10 +396,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_THREAD_LEVEL
+#ifndef OS_EVR_THREAD_LEVEL
#define OS_EVR_THREAD_LEVEL 0x05U
#endif
-
+
// Generic Wait
// Recording level for Generic Wait events.
// Error events
@@ -407,10 +407,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_WAIT_LEVEL
+#ifndef OS_EVR_WAIT_LEVEL
#define OS_EVR_WAIT_LEVEL 0x01U
#endif
-
+
// Thread Flags
// Recording level for Thread Flags events.
// Error events
@@ -418,10 +418,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_THFLAGS_LEVEL
+#ifndef OS_EVR_THFLAGS_LEVEL
#define OS_EVR_THFLAGS_LEVEL 0x01U
#endif
-
+
// Event Flags
// Recording level for Event Flags events.
// Error events
@@ -429,10 +429,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_EVFLAGS_LEVEL
+#ifndef OS_EVR_EVFLAGS_LEVEL
#define OS_EVR_EVFLAGS_LEVEL 0x01U
#endif
-
+
// Timer
// Recording level for Timer events.
// Error events
@@ -440,10 +440,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_TIMER_LEVEL
+#ifndef OS_EVR_TIMER_LEVEL
#define OS_EVR_TIMER_LEVEL 0x01U
#endif
-
+
// Mutex
// Recording level for Mutex events.
// Error events
@@ -451,10 +451,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MUTEX_LEVEL
+#ifndef OS_EVR_MUTEX_LEVEL
#define OS_EVR_MUTEX_LEVEL 0x01U
#endif
-
+
// Semaphore
// Recording level for Semaphore events.
// Error events
@@ -462,10 +462,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_SEMAPHORE_LEVEL
+#ifndef OS_EVR_SEMAPHORE_LEVEL
#define OS_EVR_SEMAPHORE_LEVEL 0x01U
#endif
-
+
// Memory Pool
// Recording level for Memory Pool events.
// Error events
@@ -473,10 +473,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MEMPOOL_LEVEL
+#ifndef OS_EVR_MEMPOOL_LEVEL
#define OS_EVR_MEMPOOL_LEVEL 0x01U
#endif
-
+
// Message Queue
// Recording level for Message Queue events.
// Error events
@@ -484,87 +484,87 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MSGQUEUE_LEVEL
+#ifndef OS_EVR_MSGQUEUE_LEVEL
#define OS_EVR_MSGQUEUE_LEVEL 0x01U
#endif
-
+
//
-
+
//
-
+
// RTOS Event Generation
// Enables event generation for RTX components (requires RTX source variant).
-
+
// Memory Management
// Enables Memory Management event generation.
#ifndef OS_EVR_MEMORY
#define OS_EVR_MEMORY 1
#endif
-
+
// Kernel
// Enables Kernel event generation.
#ifndef OS_EVR_KERNEL
#define OS_EVR_KERNEL 1
#endif
-
+
// Thread
// Enables Thread event generation.
#ifndef OS_EVR_THREAD
#define OS_EVR_THREAD 1
#endif
-
+
// Generic Wait
// Enables Generic Wait event generation.
#ifndef OS_EVR_WAIT
#define OS_EVR_WAIT 1
#endif
-
+
// Thread Flags
// Enables Thread Flags event generation.
#ifndef OS_EVR_THFLAGS
#define OS_EVR_THFLAGS 1
#endif
-
+
// Event Flags
// Enables Event Flags event generation.
#ifndef OS_EVR_EVFLAGS
#define OS_EVR_EVFLAGS 1
#endif
-
+
// Timer
// Enables Timer event generation.
#ifndef OS_EVR_TIMER
#define OS_EVR_TIMER 1
#endif
-
+
// Mutex
// Enables Mutex event generation.
#ifndef OS_EVR_MUTEX
#define OS_EVR_MUTEX 1
#endif
-
+
// Semaphore
// Enables Semaphore event generation.
#ifndef OS_EVR_SEMAPHORE
#define OS_EVR_SEMAPHORE 1
#endif
-
+
// Memory Pool
// Enables Memory Pool event generation.
#ifndef OS_EVR_MEMPOOL
#define OS_EVR_MEMPOOL 1
#endif
-
+
// Message Queue
// Enables Message Queue event generation.
#ifndef OS_EVR_MSGQUEUE
#define OS_EVR_MSGQUEUE 1
#endif
-
+
//
-
+
//
-
+
// Number of Threads which use standard C/C++ library libspace
// (when thread specific memory allocation is not used).
#if (OS_THREAD_OBJ_MEM == 0)
@@ -572,7 +572,7 @@
#else
#define OS_THREAD_LIBSPACE_NUM OS_THREAD_NUM
#endif
-
+
//------------- <<< end of configuration section >>> ---------------------------
-
+
#endif // RTX_CONFIG_H_
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
index a7a090e77..3cb7eeb44 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/Device/ARMCM23_TZ/partition_ARMCM23.h
@@ -326,7 +326,7 @@
// <0=>Secure
// <1=>Non-Secure
// Value for SCB->ICSR register bit STTNS
-// only for single SysTick implementation
+// only for single SysTick implementation
*/
#define SCB_ICSR_STTNS_VAL 0
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index 1cde6a797..35f9ceae1 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_threadx_non-secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_threadx_non-secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM23_TZ.h"
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
index 476361d7b..66e03dff9 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'ThreadX_Library'
- * Target: 'ThreadX_Library_Project'
+ * Project: 'ThreadX_Library'
+ * Target: 'ThreadX_Library_Project'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM23_TZ.h"
diff --git a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
index 7320b94d5..df82f09b3 100644
--- a/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
+++ b/ports/cortex_m23/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -69,7 +69,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -102,91 +102,91 @@ CHAR *pointer;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_0,256);
-
+
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_1,256);
-
+
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_2,256);
-
+
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_3,256);
-
+
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_4,256);
-
+
/* Allocate the stack for thread 5. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_5,256);
-
+
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_6,256);
-
+
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate secure stack space for thread. */
tx_thread_secure_stack_allocate(&thread_7,256);
-
+
/* Allocate the message queue. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
@@ -226,9 +226,9 @@ void thread_0_entry(ULONG thread_input)
{
UINT status;
INT test_secure;
-
+
(VOID)thread_input; /* unused parameter. */
-
+
#if !defined(TX_SINGLE_MODE_SECURE) && !defined(TX_SINGLE_MODE_NON_SECURE)
/* Secure call and callback example.
Only to be used when not running in a single mode. */
@@ -236,7 +236,7 @@ INT test_secure;
test_secure = func2(callbackA, test_secure);
tx_thread_secure_stack_free(&thread_0);
#endif
-
+
/* This thread simply sits in while-forever-sleep loop. */
while(1)
{
@@ -263,7 +263,7 @@ void thread_1_entry(ULONG thread_input)
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply sends messages to a queue shared by thread 2. */
while(1)
{
@@ -290,7 +290,7 @@ ULONG received_message;
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread retrieves messages placed on the queue by thread 1. */
while(1)
{
@@ -301,11 +301,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -316,7 +316,7 @@ void thread_3_and_4_entry(ULONG thread_input)
{
UINT status;
-
+
/* This function is executed from thread 3 and thread 4. As the loop
below shows, these function compete for ownership of semaphore_0. */
while(1)
@@ -355,7 +355,7 @@ UINT status;
ULONG actual_flags;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply waits for an event in a forever loop. */
while(1)
{
@@ -364,7 +364,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -417,7 +417,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S b/ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S
index 00fd8775a..c5565bdda 100644
--- a/ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -103,7 +96,7 @@ _tx_initialize_low_level:
// LDR r0, =0xE0001000 // Build address of DWT register
// LDR r1, [r0] // Pickup the current value
// ORR r1, r1, #1 // Set the CYCCNTENA bit
-// STR r1, [r0] // Enable the cycle count register
+// STR r1, [r0] // Enable the cycle count register
/* Set system stack pointer from vector value. */
LDR r0, =_tx_thread_system_stack_ptr // Build address of system stack pointer
@@ -121,21 +114,21 @@ _tx_initialize_low_level:
/* Configure handler priorities. */
LDR r1, =0x00000000 // Rsrv, UsgF, BusF, MemM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD18 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD18 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 4-7 Priority Registers
LDR r1, =0xFF000000 // SVCl, Rsrv, Rsrv, Rsrv
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD1C //
- ADD r0, r0, r2 //
+ LDR r2, =0xD1C //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 8-11 Priority Registers
// Note: SVC must be lowest priority, which is 0xFF
LDR r1, =0x40FF0000 // SysT, PnSV, Rsrv, DbgM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD20 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD20 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 12-15 Priority Registers
// Note: PnSV must be lowest priority, which is 0xFF
@@ -216,7 +209,7 @@ HardFault_Handler:
// A stack overflow will trigger a hardfault.
// There is no CFSR in M23, so we will not try to
// determine if the fault is caused by a stack overflow
- // or some other condition.
+ // or some other condition.
B HardFault_Handler
.end
diff --git a/ports/cortex_m23/ac6/inc/tx_port.h b/ports/cortex_m23/ac6/inc/tx_port.h
index 4294c29dc..5ae0b62b0 100644
--- a/ports/cortex_m23/ac6/inc/tx_port.h
+++ b/ports/cortex_m23/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,30 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), removed */
-/* unneeded header file, added */
-/* conditional compilation */
-/* for ARMv8-M (Cortex M23/33) */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -74,7 +51,7 @@
/* Determine if the optional ThreadX user define file should be used. */
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -111,17 +88,17 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_PORT_THREAD_STACK_ERROR_HANDLING
-/* Define the system API mappings based on the error checking
- selected by the user. Note: this section is only applicable to
+/* Define the system API mappings based on the error checking
+ selected by the user. Note: this section is only applicable to
application source code, hence the conditional that turns off this
stuff when the include file is processed by the ThreadX source. */
#ifndef TX_SOURCE_CODE
-/* Determine if error checking is desired. If so, map API functions
+/* Determine if error checking is desired. If so, map API functions
to the appropriate error checking front-ends. Otherwise, map API
- functions to the core functions that actually perform the work.
+ functions to the core functions that actually perform the work.
Note: error checking is enabled by default. */
#ifdef TX_DISABLE_ERROR_CHECKING
@@ -166,7 +143,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -178,7 +155,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -217,7 +194,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -231,7 +208,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
#define TX_THREAD_EXTENSION_0
@@ -255,7 +232,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
@@ -322,7 +299,7 @@ inline static unsigned int _get_ipsr(void)
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | _get_ipsr())
@@ -348,14 +325,14 @@ extern void _tx_thread_secure_stack_initialize(void);
#define TX_PORT_SPECIFIC_PRE_INITIALIZATION _tx_thread_secure_stack_initialize();
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -365,9 +342,9 @@ extern void _tx_thread_secure_stack_initialize(void);
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -413,8 +390,8 @@ unsigned int was_masked;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M23/AC6 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M23/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m23/ac6/inc/tx_secure_interface.h b/ports/cortex_m23/ac6/inc/tx_secure_interface.h
index fbf20b318..5ac37fbf4 100644
--- a/ports/cortex_m23/ac6/inc/tx_secure_interface.h
+++ b/ports/cortex_m23/ac6/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m23/ac6/readme_threadx.txt b/ports/cortex_m23/ac6/readme_threadx.txt
index 787881bcb..8169ebc1c 100644
--- a/ports/cortex_m23/ac6/readme_threadx.txt
+++ b/ports/cortex_m23/ac6/readme_threadx.txt
@@ -1,22 +1,22 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M23
+ Microsoft's Azure RTOS ThreadX for Cortex-M23
Using the AC6 Tools in Keil uVision
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first open
-the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first open
+the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
into Keil.
2. Building the ThreadX run-time Library
Building the ThreadX library is easy; simply set the ThreadX_Library project
-as active, then then build the library. You should now observe the compilation
+as active, then then build the library. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file ThreadX_Library.lib.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
3. Demonstration System
@@ -24,24 +24,24 @@ replace the common files of the same name.
The ThreadX demonstration is designed to execute under the Keil debugger on the
FVP_MPS2_Cortex-M23_MDK simulator.
-Building the demonstration is easy; simply select the "Batch Build" button.
-You should now observe the compilation and assembly of the ThreadX demonstration of
-both the demo_secure_zone and demo_threadx_non-secure_zone projects.
+Building the demonstration is easy; simply select the "Batch Build" button.
+You should now observe the compilation and assembly of the ThreadX demonstration of
+both the demo_secure_zone and demo_threadx_non-secure_zone projects.
Then click the Start/Stop Debug Session button to start the simulator and begin debugging.
You are now ready to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-M23 using AC6 tools uses the standard AC6
+The entry point in ThreadX for the Cortex-M23 using AC6 tools uses the standard AC6
Cortex-M23 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -50,11 +50,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M23 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 LR Interrupted LR (LR at time of PENDSV)
0x04 r8
@@ -77,26 +77,26 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
6. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M23
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-M23 vectors start at the label __Vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
7.2 Managed Interrupts
@@ -122,7 +122,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -134,8 +134,8 @@ your_assembly_isr:
Note: the Cortex-M23 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
@@ -150,7 +150,7 @@ information associated with this specific port of ThreadX:
tx_thread_secure_stack_initialize.S New file
tx_thread_schedule.S Added secure stack initialize to SVC hander
tx_thread_secure_stack.c Fixed stack pointer save, initialize in handler mode
-
+
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
diff --git a/ports/cortex_m23/ac6/src/tx_misra.S b/ports/cortex_m23/ac6/src/tx_misra.S
index 221b9e1a3..b4735cc14 100644
--- a/ports/cortex_m23/ac6/src/tx_misra.S
+++ b/ports/cortex_m23/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -672,7 +673,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -687,7 +688,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -704,8 +705,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -719,9 +720,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m23/ac6/src/tx_thread_context_restore.S b/ports/cortex_m23/ac6/src/tx_thread_context_restore.S
index c8478c854..1b0052ef9 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_context_save.S b/ports/cortex_m23/ac6/src/tx_thread_context_save.S
index a0b2bdd6c..463a44177 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m23/ac6/src/tx_thread_interrupt_control.S
index fc624fa1d..71e1d835f 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.S
index 3bd783b09..82ac2588e 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.S
index d63de10e2..03cae94a6 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_schedule.S b/ports/cortex_m23/ac6/src/tx_thread_schedule.S
index a582e85f0..be5661f09 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,20 +61,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -325,7 +312,7 @@ _tx_get_svc:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m23/ac6/src/tx_thread_secure_stack.c b/ports/cortex_m23/ac6/src/tx_thread_secure_stack.c
index baae59d8b..0073bd47d 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m23/ac6/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,21 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), and */
-/* changed name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments, updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.S
index eda6d513b..87108d8a2 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.S b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.S
index 2a02ee129..a24f1f822 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_initialize.S
index 03368ccab..4a046400a 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_thread_stack_build.S b/ports/cortex_m23/ac6/src/tx_thread_stack_build.S
index 204e3cf1c..c28ef1e2c 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
@@ -100,7 +93,7 @@ _tx_thread_stack_build:
Stack Bottom: (higher memory address) */
LDR r2, [r0, #16] // Pickup end of stack area
- MOVW r3, #0x7 //
+ MOVW r3, #0x7 //
BICS r2, r2, r3 // Align frame for 8-byte alignment
SUBS r2, r2, #68 // Subtract frame size
#ifdef TX_SINGLE_MODE_SECURE
diff --git a/ports/cortex_m23/ac6/src/tx_thread_system_return.S b/ports/cortex_m23/ac6/src/tx_thread_system_return.S
index 05e2be401..d85981da1 100644
--- a/ports/cortex_m23/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m23/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/tx_timer_interrupt.S b/ports/cortex_m23/ac6/src/tx_timer_interrupt.S
index 47604260e..b5da696ec 100644
--- a/ports/cortex_m23/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m23/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m23/ac6/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m23/ac6/src/txe_thread_secure_stack_allocate.c
index aff98e872..9bade1390 100644
--- a/ports/cortex_m23/ac6/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m23/ac6/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m23/ac6/src/txe_thread_secure_stack_free.c b/ports/cortex_m23/ac6/src/txe_thread_secure_stack_free.c
index eb2d6b0eb..75a26945f 100644
--- a/ports/cortex_m23/ac6/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m23/ac6/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m23/gnu/inc/tx_port.h b/ports/cortex_m23/gnu/inc/tx_port.h
index e05f826f6..b1eab9e38 100644
--- a/ports/cortex_m23/gnu/inc/tx_port.h
+++ b/ports/cortex_m23/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,31 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), */
-/* remove unneeded headers, */
-/* use builtins, added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), added */
-/* conditional compilation */
-/* for ARMv8-M (Cortex M23/33) */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -75,7 +51,7 @@
/* Determine if the optional ThreadX user define file should be used. */
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -111,17 +87,17 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_PORT_THREAD_STACK_ERROR_HANDLING
-/* Define the system API mappings based on the error checking
- selected by the user. Note: this section is only applicable to
+/* Define the system API mappings based on the error checking
+ selected by the user. Note: this section is only applicable to
application source code, hence the conditional that turns off this
stuff when the include file is processed by the ThreadX source. */
#ifndef TX_SOURCE_CODE
-/* Determine if error checking is desired. If so, map API functions
+/* Determine if error checking is desired. If so, map API functions
to the appropriate error checking front-ends. Otherwise, map API
- functions to the core functions that actually perform the work.
+ functions to the core functions that actually perform the work.
Note: error checking is enabled by default. */
#ifdef TX_DISABLE_ERROR_CHECKING
@@ -166,7 +142,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -178,7 +154,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -217,7 +193,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -231,7 +207,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
#define TX_THREAD_EXTENSION_0
@@ -255,7 +231,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
@@ -321,7 +297,7 @@ inline static unsigned int _get_ipsr(void)
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | _get_ipsr())
@@ -347,14 +323,14 @@ extern void _tx_thread_secure_stack_initialize(void);
#define TX_PORT_SPECIFIC_PRE_INITIALIZATION _tx_thread_secure_stack_initialize();
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -364,9 +340,9 @@ extern void _tx_thread_secure_stack_initialize(void);
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -445,8 +421,8 @@ unsigned int interrupt_save;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M23/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M23/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m23/gnu/inc/tx_secure_interface.h b/ports/cortex_m23/gnu/inc/tx_secure_interface.h
index fbf20b318..5ac37fbf4 100644
--- a/ports/cortex_m23/gnu/inc/tx_secure_interface.h
+++ b/ports/cortex_m23/gnu/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m23/gnu/readme_threadx.txt b/ports/cortex_m23/gnu/readme_threadx.txt
index 08a8ca82c..9ce763415 100644
--- a/ports/cortex_m23/gnu/readme_threadx.txt
+++ b/ports/cortex_m23/gnu/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M23
+ Microsoft's Azure RTOS ThreadX for Cortex-M23
Using the GNU Tools
@@ -6,8 +6,8 @@
1. Building the ThreadX run-time Library
An example .bat file is in the example_build directory.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
@@ -16,15 +16,15 @@ No demonstration example is provided.
3. System Initialization
-The entry point in ThreadX for the Cortex-M23 using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M23 using gnu tools uses the standard GNU
Cortex-M23 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -33,11 +33,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M23 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 LR Interrupted LR (LR at time of PENDSV)
0x04 r8
@@ -60,26 +60,26 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M23
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M23 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
@@ -105,7 +105,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -117,8 +117,8 @@ your_assembly_isr:
Note: the Cortex-M23 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
@@ -140,14 +140,14 @@ information associated with this specific port of ThreadX:
03-02-2021 The following files were changed/added for version 6.1.5:
tx_port.h Added ULONG64_DEFINED
-12-31-2020 The following files were
+12-31-2020 The following files were
changed/added for port specific version 6.1.3:
-
- tx_port.h Remove unneeded include files,
+
+ tx_port.h Remove unneeded include files,
use builtin functions,
modified comments.
-
- tx_thread_secure_stack.c Remove unneeded include file,
+
+ tx_thread_secure_stack.c Remove unneeded include file,
use inline get/set functions,
modified comments.
diff --git a/ports/cortex_m23/gnu/src/tx_initialize_low_level.S b/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
index 6cdaa552d..ba092253d 100644
--- a/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -91,20 +84,20 @@ _tx_initialize_low_level:
/* Set base of available memory to end of non-initialised RAM area. */
LDR r0, =_tx_initialize_unused_memory // Build address of unused memory pointer
LDR r1, =Image$$ARM_LIB_STACK$$ZI$$Limit // Build first free address
- ADDS r1, r1, #4 //
+ ADDS r1, r1, #4 //
STR r1, [r0] // Setup first unused memory pointer
/* Setup Vector Table Offset Register. */
LDR r0, =0xE000ED08 // Build address of NVIC registers
LDR r1, =__Vectors // Pickup address of vector table
- STR r1, [r0] // Set vector table address
+ STR r1, [r0] // Set vector table address
// /* Enable the cycle count register. */
//
// LDR r0, =0xE0001000 // Build address of DWT register
// LDR r1, [r0] // Pickup the current value
// ORR r1, r1, #1 // Set the CYCCNTENA bit
-// STR r1, [r0] // Enable the cycle count register
+// STR r1, [r0] // Enable the cycle count register
/* Set system stack pointer from vector value. */
LDR r0, =_tx_thread_system_stack_ptr // Build address of system stack pointer
@@ -122,21 +115,21 @@ _tx_initialize_low_level:
/* Configure handler priorities. */
LDR r1, =0x00000000 // Rsrv, UsgF, BusF, MemM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD18 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD18 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 4-7 Priority Registers
LDR r1, =0xFF000000 // SVCl, Rsrv, Rsrv, Rsrv
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD1C //
- ADD r0, r0, r2 //
+ LDR r2, =0xD1C //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 8-11 Priority Registers
// Note: SVC must be lowest priority, which is 0xFF
LDR r1, =0x40FF0000 // SysT, PnSV, Rsrv, DbgM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD20 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD20 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 12-15 Priority Registers
// Note: PnSV must be lowest priority, which is 0xFF
@@ -217,7 +210,7 @@ HardFault_Handler:
// A stack overflow will trigger a hardfault.
// There is no CFSR in M23, so we will not try to
// determine if the fault is caused by a stack overflow
- // or some other condition.
+ // or some other condition.
B HardFault_Handler
.end
diff --git a/ports/cortex_m23/gnu/src/tx_misra.S b/ports/cortex_m23/gnu/src/tx_misra.S
index 221b9e1a3..b4735cc14 100644
--- a/ports/cortex_m23/gnu/src/tx_misra.S
+++ b/ports/cortex_m23/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -672,7 +673,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -687,7 +688,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -704,8 +705,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -719,9 +720,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m23/gnu/src/tx_thread_context_restore.S b/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
index 59e577b06..6f2b453cf 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_context_save.S b/ports/cortex_m23/gnu/src/tx_thread_context_save.S
index ab5eecde8..84bf99083 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m23/gnu/src/tx_thread_interrupt_control.S
index 4b2a26892..53fd963c1 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.S
index e670a1bdd..a528ae25b 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.S
index 56cf9f492..e8193789b 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_schedule.S b/ports/cortex_m23/gnu/src/tx_thread_schedule.S
index c41cf38ba..819199218 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,20 +57,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -321,7 +308,7 @@ _tx_get_svc:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m23/gnu/src/tx_thread_secure_stack.c b/ports/cortex_m23/gnu/src/tx_thread_secure_stack.c
index 4f757f90a..44376c272 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m23/gnu/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,21 +99,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), changed */
-/* name, execute in handler */
-/* mode, disable optimization, */
-/* resulting in version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments, updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry, optimize(0)))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.S
index 90b9686bd..cf07f868c 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.S b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.S
index dda4843e9..725f00ccc 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
index b784cd916..48aec578a 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_thread_stack_build.S b/ports/cortex_m23/gnu/src/tx_thread_stack_build.S
index b569dfe03..bd25b57d2 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
@@ -100,7 +93,7 @@ _tx_thread_stack_build:
Stack Bottom: (higher memory address) */
LDR r2, [r0, #16] // Pickup end of stack area
- MOVW r3, #0x7 //
+ MOVW r3, #0x7 //
BICS r2, r2, r3 // Align frame for 8-byte alignment
SUBS r2, r2, #68 // Subtract frame size
#ifdef TX_SINGLE_MODE_SECURE
diff --git a/ports/cortex_m23/gnu/src/tx_thread_system_return.S b/ports/cortex_m23/gnu/src/tx_thread_system_return.S
index add8dd862..a14fdba3a 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/tx_timer_interrupt.S b/ports/cortex_m23/gnu/src/tx_timer_interrupt.S
index ca3d52d4c..bde6c3163 100644
--- a/ports/cortex_m23/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m23/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m23/gnu/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m23/gnu/src/txe_thread_secure_stack_allocate.c
index aff98e872..9bade1390 100644
--- a/ports/cortex_m23/gnu/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m23/gnu/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m23/gnu/src/txe_thread_secure_stack_free.c b/ports/cortex_m23/gnu/src/txe_thread_secure_stack_free.c
index eb2d6b0eb..75a26945f 100644
--- a/ports/cortex_m23/gnu/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m23/gnu/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m23/iar/inc/tx_port.h b/ports/cortex_m23/iar/inc/tx_port.h
index 5172ce92b..be6bebd55 100644
--- a/ports/cortex_m23/iar/inc/tx_port.h
+++ b/ports/cortex_m23/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,29 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Yuxin Zhou Modified comment(s), added */
-/* conditional compilation */
-/* for ARMv8-M (Cortex M23/33) */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -73,7 +51,7 @@
/* Determine if the optional ThreadX user define file should be used. */
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -114,17 +92,17 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_PORT_THREAD_STACK_ERROR_HANDLING
-/* Define the system API mappings based on the error checking
- selected by the user. Note: this section is only applicable to
+/* Define the system API mappings based on the error checking
+ selected by the user. Note: this section is only applicable to
application source code, hence the conditional that turns off this
stuff when the include file is processed by the ThreadX source. */
#ifndef TX_SOURCE_CODE
-/* Determine if error checking is desired. If so, map API functions
+/* Determine if error checking is desired. If so, map API functions
to the appropriate error checking front-ends. Otherwise, map API
- functions to the core functions that actually perform the work.
+ functions to the core functions that actually perform the work.
Note: error checking is enabled by default. */
#ifdef TX_DISABLE_ERROR_CHECKING
@@ -169,7 +147,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -181,7 +159,7 @@ UINT _tx_thread_secure_stack_free(struct TX_THREAD_STRUCT *tx_thread);
/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((volatile ULONG *) 0x0a800024)
@@ -220,7 +198,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -234,7 +212,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
#define TX_THREAD_EXTENSION_0
@@ -277,7 +255,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
@@ -304,7 +282,7 @@ void __iar_Initlocks(void);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
/* No IAR library support. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
#if !defined(TX_SINGLE_MODE_SECURE) && !defined(TX_SINGLE_MODE_NON_SECURE)
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) if(thread_ptr -> tx_thread_secure_stack_context){_tx_thread_secure_stack_free(thread_ptr);}
#else
@@ -346,7 +324,7 @@ void __iar_Initlocks(void);
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#ifndef TX_MISRA_ENABLE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | __get_IPSR())
@@ -372,14 +350,14 @@ extern void _tx_thread_secure_stack_initialize(void);
#define TX_PORT_SPECIFIC_PRE_INITIALIZATION _tx_thread_secure_stack_initialize();
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -389,9 +367,9 @@ extern void _tx_thread_secure_stack_initialize(void);
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -435,8 +413,8 @@ __istate_t interrupt_save;
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M23/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M23/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m23/iar/inc/tx_secure_interface.h b/ports/cortex_m23/iar/inc/tx_secure_interface.h
index fbf20b318..5ac37fbf4 100644
--- a/ports/cortex_m23/iar/inc/tx_secure_interface.h
+++ b/ports/cortex_m23/iar/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m23/iar/readme_threadx.txt b/ports/cortex_m23/iar/readme_threadx.txt
index bd1904007..8c3217c00 100644
--- a/ports/cortex_m23/iar/readme_threadx.txt
+++ b/ports/cortex_m23/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M23
+ Microsoft's Azure RTOS ThreadX for Cortex-M23
Using the IAR Tools
@@ -6,33 +6,33 @@
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into an IAR project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
No demonstration is provided because the IAR EWARM 8.50 simulator does
-not simulate the Cortex-M23 correctly.
+not simulate the Cortex-M23 correctly.
3. System Initialization
-The entry point in ThreadX for the Cortex-M23 using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M23 using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -41,10 +41,10 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M23 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 LR Interrupted LR (LR at time of PENDSV)
0x04 r8
@@ -67,17 +67,17 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M23 vectors start at the label __vector_table and is typically defined in a
+The Cortex-M23 vectors start at the label __vector_table and is typically defined in a
startup.s file (or similar). The application may modify the vector area according to its needs.
@@ -126,7 +126,7 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
diff --git a/ports/cortex_m23/iar/src/tx_iar.c b/ports/cortex_m23/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m23/iar/src/tx_iar.c
+++ b/ports/cortex_m23/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m23/iar/src/tx_initialize_low_level.s b/ports/cortex_m23/iar/src/tx_initialize_low_level.s
index aec8f69c0..fb6a109f1 100644
--- a/ports/cortex_m23/iar/src/tx_initialize_low_level.s
+++ b/ports/cortex_m23/iar/src/tx_initialize_low_level.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,13 +71,6 @@ __tx_free_memory_start
/* CALLED BY */
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
@@ -118,21 +112,21 @@ _tx_initialize_low_level:
/* Configure handler priorities. */
LDR r1, =0x00000000 // Rsrv, UsgF, BusF, MemM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD18 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD18 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 4-7 Priority Registers
LDR r1, =0xFF000000 // SVCl, Rsrv, Rsrv, Rsrv
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD1C //
- ADD r0, r0, r2 //
+ LDR r2, =0xD1C //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 8-11 Priority Registers
// Note: SVC must be lowest priority, which is 0xFF
LDR r1, =0x40FF0000 // SysT, PnSV, Rsrv, DbgM
LDR r0, =0xE000E000 // Build address of NVIC registers
- LDR r2, =0xD20 //
- ADD r0, r0, r2 //
+ LDR r2, =0xD20 //
+ ADD r0, r0, r2 //
STR r1, [r0] // Setup System Handlers 12-15 Priority Registers
// Note: PnSV must be lowest priority, which is 0xFF
@@ -191,7 +185,7 @@ HardFault_Handler:
// A stack overflow will trigger a hardfault.
// There is no CFSR in M23, so we will not try to
// determine if the fault is caused by a stack overflow
- // or some other condition.
+ // or some other condition.
B HardFault_Handler
diff --git a/ports/cortex_m23/iar/src/tx_misra.s b/ports/cortex_m23/iar/src/tx_misra.s
index a42b9e517..e43d258f5 100644
--- a/ports/cortex_m23/iar/src/tx_misra.s
+++ b/ports/cortex_m23/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -116,7 +117,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -708,7 +709,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -723,7 +724,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -740,8 +741,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -755,10 +756,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m23/iar/src/tx_thread_context_restore.s b/ports/cortex_m23/iar/src/tx_thread_context_restore.s
index 83ab38c90..11f3d0186 100644
--- a/ports/cortex_m23/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m23/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -51,13 +52,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_context_save.s b/ports/cortex_m23/iar/src/tx_thread_context_save.s
index 8ea8a775a..bb6b9d517 100644
--- a/ports/cortex_m23/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m23/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -51,13 +52,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m23/iar/src/tx_thread_interrupt_control.s
index 1e5e19737..5a74b366f 100644
--- a/ports/cortex_m23/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m23/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -51,13 +52,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m23/iar/src/tx_thread_interrupt_disable.s
index 375c9926b..6b95841aa 100644
--- a/ports/cortex_m23/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m23/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -51,13 +52,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m23/iar/src/tx_thread_interrupt_restore.s
index 3768cfb39..c5a40257c 100644
--- a/ports/cortex_m23/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m23/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -51,13 +52,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_schedule.s b/ports/cortex_m23/iar/src/tx_thread_schedule.s
index b3f110e9c..bd902dc4d 100644
--- a/ports/cortex_m23/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m23/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -69,19 +70,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -314,7 +302,7 @@ _tx_get_svc:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m23/iar/src/tx_thread_secure_stack.c b/ports/cortex_m23/iar/src/tx_thread_secure_stack.c
index 099097fbc..9ce9ccc35 100644
--- a/ports/cortex_m23/iar/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m23/iar/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,21 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), changed */
-/* name, execute in handler */
-/* mode, disable optimization, */
-/* resulting in version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments, updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m23/iar/src/tx_thread_secure_stack_allocate.s b/ports/cortex_m23/iar/src/tx_thread_secure_stack_allocate.s
index a722d4deb..5c8477888 100644
--- a/ports/cortex_m23/iar/src/tx_thread_secure_stack_allocate.s
+++ b/ports/cortex_m23/iar/src/tx_thread_secure_stack_allocate.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -52,13 +53,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_secure_stack_free.s b/ports/cortex_m23/iar/src/tx_thread_secure_stack_free.s
index cba64becf..4ce87ee38 100644
--- a/ports/cortex_m23/iar/src/tx_thread_secure_stack_free.s
+++ b/ports/cortex_m23/iar/src/tx_thread_secure_stack_free.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -50,13 +51,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_secure_stack_initialize.s b/ports/cortex_m23/iar/src/tx_thread_secure_stack_initialize.s
index 95f0c2503..325a62bfb 100644
--- a/ports/cortex_m23/iar/src/tx_thread_secure_stack_initialize.s
+++ b/ports/cortex_m23/iar/src/tx_thread_secure_stack_initialize.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -50,17 +51,6 @@
/* CALLED BY */
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/tx_thread_stack_build.s b/ports/cortex_m23/iar/src/tx_thread_stack_build.s
index bbb60ae6e..71d25cecb 100644
--- a/ports/cortex_m23/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m23/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,13 +54,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
@@ -90,7 +84,7 @@ _tx_thread_stack_build:
Stack Bottom: (higher memory address) */
LDR r2, [r0, #16] // Pickup end of stack area
- MOVW r3, #0x7 //
+ MOVW r3, #0x7 //
BICS r2, r2, r3 // Align frame for 8-byte alignment
SUBS r2, r2, #68 // Subtract frame size
#ifdef TX_SINGLE_MODE_SECURE
diff --git a/ports/cortex_m23/iar/src/tx_thread_system_return.s b/ports/cortex_m23/iar/src/tx_thread_system_return.s
index f574ed35f..91ef52c72 100644
--- a/ports/cortex_m23/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m23/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,13 +54,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/tx_timer_interrupt.s b/ports/cortex_m23/iar/src/tx_timer_interrupt.s
index 9dd724639..eadef8bfa 100644
--- a/ports/cortex_m23/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m23/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,13 +68,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m23/iar/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m23/iar/src/txe_thread_secure_stack_allocate.c
index aff98e872..9bade1390 100644
--- a/ports/cortex_m23/iar/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m23/iar/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m23/iar/src/txe_thread_secure_stack_free.c b/ports/cortex_m23/iar/src/txe_thread_secure_stack_free.c
index eb2d6b0eb..75a26945f 100644
--- a/ports/cortex_m23/iar/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m23/iar/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m3/ac5/example_build/sample_threadx.c b/ports/cortex_m3/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m3/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_m3/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m3/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_m3/ac5/example_build/tx_initialize_low_level.s
index 696ea4ef0..f0c38db20 100644
--- a/ports/cortex_m3/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m3/ac5/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -122,12 +122,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m3/ac5/inc/tx_port.h b/ports/cortex_m3/ac5/inc/tx_port.h
index 2e67b649b..32e640ba4 100644
--- a/ports/cortex_m3/ac5/inc/tx_port.h
+++ b/ports/cortex_m3/ac5/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/AC5 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/AC5 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m3/ac5/readme_threadx.txt b/ports/cortex_m3/ac5/readme_threadx.txt
index b7b7cee96..e261213ee 100644
--- a/ports/cortex_m3/ac5/readme_threadx.txt
+++ b/ports/cortex_m3/ac5/readme_threadx.txt
@@ -5,14 +5,14 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the AC5
-compiler. At this point you may run the build_threadx.bat batch file. This will
-build the ThreadX run-time environment in the "example_build" directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the AC5
+compiler. At this point you may run the build_threadx.bat batch file. This will
+build the ThreadX run-time environment in the "example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -21,28 +21,28 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute under the ARM DS Cortex-M
simulator.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM DS Cortex-M
simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -51,7 +51,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -134,21 +134,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -187,8 +187,8 @@ your_assembly_isr
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m3/ac5/src/tx_thread_context_restore.s b/ports/cortex_m3/ac5/src/tx_thread_context_restore.s
index 235032739..d8c8d6dde 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_context_save.s b/ports/cortex_m3/ac5/src/tx_thread_context_save.s
index 75a688614..3d59c9667 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_m3/ac5/src/tx_thread_interrupt_control.s
index 050d349df..340ef0f65 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_m3/ac5/src/tx_thread_interrupt_disable.s
index 016420181..863085725 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_m3/ac5/src/tx_thread_interrupt_restore.s
index d5b937f66..917db4e47 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_schedule.s b/ports/cortex_m3/ac5/src/tx_thread_schedule.s
index 44449388e..84613f2db 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_stack_build.s b/ports/cortex_m3/ac5/src/tx_thread_stack_build.s
index fa77e2d68..6639bdf81 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m3/ac5/src/tx_thread_system_return.s b/ports/cortex_m3/ac5/src/tx_thread_system_return.s
index 53d480471..e10d05c67 100644
--- a/ports/cortex_m3/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_m3/ac5/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m3/ac5/src/tx_timer_interrupt.s b/ports/cortex_m3/ac5/src/tx_timer_interrupt.s
index b87639de7..68b30e987 100644
--- a/ports/cortex_m3/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_m3/ac5/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m3/ac6/example_build/sample_threadx/.cproject b/ports/cortex_m3/ac6/example_build/sample_threadx/.cproject
index 5f5a5f669..5aedaf809 100644
--- a/ports/cortex_m3/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_m3/ac6/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m3/ac6/example_build/sample_threadx/exceptions.c b/ports/cortex_m3/ac6/example_build/sample_threadx/exceptions.c
index 94c87d7a4..f0dd86004 100644
--- a/ports/cortex_m3/ac6/example_build/sample_threadx/exceptions.c
+++ b/ports/cortex_m3/ac6/example_build/sample_threadx/exceptions.c
@@ -1,7 +1,7 @@
/*
** Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
** Use, modification and redistribution of this file is subject to your possession of a
-** valid End User License Agreement for the Arm Product of which these examples are part of
+** valid End User License Agreement for the Arm Product of which these examples are part of
** and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.scat
index 8578282d7..7e806ce37 100644
--- a/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_m3/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -3,7 +3,7 @@
;*******************************************************
; Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_m3/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_m3/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index bd52395a9..b5ef57e5d 100644
--- a/ports/cortex_m3/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_m3/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -75,12 +75,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
diff --git a/ports/cortex_m3/ac6/example_build/tx/.cproject b/ports/cortex_m3/ac6/example_build/tx/.cproject
index a3f5ed915..bf2786fac 100644
--- a/ports/cortex_m3/ac6/example_build/tx/.cproject
+++ b/ports/cortex_m3/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m3/ac6/inc/tx_port.h b/ports/cortex_m3/ac6/inc/tx_port.h
index 592cecf85..0a25ae64f 100644
--- a/ports/cortex_m3/ac6/inc/tx_port.h
+++ b/ports/cortex_m3/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m3/ac6/readme_threadx.txt b/ports/cortex_m3/ac6/readme_threadx.txt
index d98c90cbe..6447c5177 100644
--- a/ports/cortex_m3/ac6/readme_threadx.txt
+++ b/ports/cortex_m3/ac6/readme_threadx.txt
@@ -5,12 +5,12 @@
1. Building the ThreadX run-time Library
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -20,27 +20,27 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
MPS2_Cortex_Mx Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-mx_tx.launch' file, click
'Debug As', and then click 'cortex-mx_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m3/ac6/src/tx_misra.S b/ports/cortex_m3/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m3/ac6/src/tx_misra.S
+++ b/ports/cortex_m3/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m3/ac6/src/tx_thread_context_restore.S b/ports/cortex_m3/ac6/src/tx_thread_context_restore.S
index 949478b56..bc2b47522 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_context_save.S b/ports/cortex_m3/ac6/src/tx_thread_context_save.S
index f6a10399e..22f46a262 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m3/ac6/src/tx_thread_interrupt_control.S
index dcc24d49d..c24355285 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m3/ac6/src/tx_thread_interrupt_disable.S
index a1a0b4591..37525e38c 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m3/ac6/src/tx_thread_interrupt_restore.S
index bc5b910a6..3c3e2473f 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_schedule.S b/ports/cortex_m3/ac6/src/tx_thread_schedule.S
index 5f22b3ffe..98d21f36c 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,16 +71,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_stack_build.S b/ports/cortex_m3/ac6/src/tx_thread_stack_build.S
index d5cc0b490..31303ef8a 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m3/ac6/src/tx_thread_system_return.S b/ports/cortex_m3/ac6/src/tx_thread_system_return.S
index e74716055..e1c5c2a2c 100644
--- a/ports/cortex_m3/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m3/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m3/ac6/src/tx_timer_interrupt.S b/ports/cortex_m3/ac6/src/tx_timer_interrupt.S
index ee13bef8f..05d5c227e 100644
--- a/ports/cortex_m3/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m3/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m3/ghs/example_build/sample_threadx.c b/ports/cortex_m3/ghs/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m3/ghs/example_build/sample_threadx.c
+++ b/ports/cortex_m3/ghs/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m3/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_m3/ghs/example_build/tx_initialize_low_level.arm
index f8b7bb8e9..9259c2f43 100644
--- a/ports/cortex_m3/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_m3/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_m3/ghs/inc/tx_el.h b/ports/cortex_m3/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_m3/ghs/inc/tx_el.h
+++ b/ports/cortex_m3/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_m3/ghs/inc/tx_port.h b/ports/cortex_m3/ghs/inc/tx_port.h
index a0f6cae57..1327b3a7f 100644
--- a/ports/cortex_m3/ghs/inc/tx_port.h
+++ b/ports/cortex_m3/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -379,7 +371,7 @@ asm void restore_ints(int a)
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/GHS Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/GHS Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_m3/ghs/readme_threadx.txt b/ports/cortex_m3/ghs/readme_threadx.txt
index ad1110fed..02f70c650 100644
--- a/ports/cortex_m3/ghs/readme_threadx.txt
+++ b/ports/cortex_m3/ghs/readme_threadx.txt
@@ -4,16 +4,16 @@
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,52 +21,52 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-M3 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-M3 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-M3 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -75,11 +75,11 @@ to tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M3 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r4
0x04 r5
@@ -101,21 +101,21 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
7. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
8. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M3
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -127,7 +127,7 @@ the vector area according to its needs.
8.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -136,7 +136,7 @@ Here is the standard template for managed ISRs in ThreadX:
__tx_IntHandler:
PUSH {lr}
BL _tx_thread_context_save
-
+
/* Do interrupt handler work here */
B _tx_thread_context_restore
@@ -154,7 +154,7 @@ information associated with this specific port of ThreadX:
03-02-2021 The following files were changed/added for version 6.1.5:
tx_thread_schedule.s Added low power feature
-05/19/2020 Initial ThreadX version of Cortex-M3/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-M3/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_m3/ghs/src/tx_el.c b/ports/cortex_m3/ghs/src/tx_el.c
index fd58768f9..b5d3b8b73 100644
--- a/ports/cortex_m3/ghs/src/tx_el.c
+++ b/ports/cortex_m3/ghs/src/tx_el.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
/** */
@@ -49,44 +50,38 @@ extern TX_THREAD *_tx_thread_current_ptr;
UINT _tx_thread_interrupt_control(UINT new_posture);
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_initialize PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_initialize PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function creates the Event Log (in the format dictated by the */
-/* GHS Event Analyzer) and sets up various information for subsequent */
-/* operation. The start and end of the Event Log is determined by the */
-/* .eventlog section in the linker control file. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function creates the Event Log (in the format dictated by the */
+/* GHS Event Analyzer) and sets up various information for subsequent */
+/* operation. The start and end of the Event Log is determined by the */
+/* .eventlog section in the linker control file. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
@@ -150,7 +145,7 @@ UINT i;
/* Setup event_ptr (pointer to oldest event) field to the start
of the event pool. */
- *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
+ *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
(TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = work_ptr + sizeof(ULONG);
@@ -166,17 +161,17 @@ UINT i;
/* Clear the entire TNI array, this is the initial setting. */
end_ptr = work_ptr + (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE);
memset((void *)work_ptr, 0, (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* At this point, we are pointing at the actual Event Entry area. */
-
+
/* Remember the start of the actual event log area. */
_tx_el_event_area_start = work_ptr;
/* Clear the entire Event area. */
end_ptr = work_ptr + event_log_size;
memset((void *)work_ptr, 0, event_log_size);
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* Save the end pointer for later use. */
_tx_el_event_area_end = work_ptr;
@@ -201,7 +196,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID to NULL. */
@@ -216,40 +211,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_register PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_register PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function registers a thread in the event log for future */
+/* */
+/* This function registers a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -278,7 +273,7 @@ UINT i;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Check to see if there were no more valid entries. */
if (i >= TX_EL_TNIS)
return(TX_EL_NO_MORE_TNI_ROOM);
@@ -304,7 +299,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID. */
@@ -321,40 +316,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_unregister PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_unregister PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function unregisters a thread in the event log for future */
+/* */
+/* This function unregisters a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -394,7 +389,7 @@ UINT i, j;
}
else if (*work_ptr == 0)
{
-
+
/* Null terminated, just break the loop. */
break;
}
@@ -426,7 +421,7 @@ UINT i, j;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Determine status to return. */
if (found)
return(TX_SUCCESS);
@@ -435,49 +430,49 @@ UINT i, j;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_user_event_insert PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_user_event_insert PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a user event into the event log. */
-/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* If the event log is full, the oldest event is overwritten. */
+/* */
+/* INPUT */
+/* */
/* sub_type Event subtype for kernel call */
/* info_1 First information field */
/* info_2 Second information field */
/* info_3 Third information field */
/* info_4 Fourth information field */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* */
/**************************************************************************/
-VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
+VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
ULONG info_3, ULONG info_4)
{
@@ -545,7 +540,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -558,41 +553,41 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_running PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_running PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread change event into the event */
/* log, which indicates that a context switch is taking place. */
/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_schedule ThreadX scheduler */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_schedule ThreadX scheduler */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -604,7 +599,7 @@ VOID _tx_el_thread_running(TX_THREAD *thread_ptr)
UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -646,7 +641,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -658,43 +653,43 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_preempted PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_preempted PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread preempted event into the event */
/* log, which indicates that an interrupt occurred that made a higher */
/* priority thread ready for execution. In this case, the previously */
/* executing thread has an event entered to indicate it is no longer */
/* running. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_context_restore ThreadX context restore */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_context_restore ThreadX context restore */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -707,7 +702,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -749,7 +744,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -761,40 +756,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt event into the log, which */
/* indicates the start of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -807,7 +802,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -853,7 +848,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -865,40 +860,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_end PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_end PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt end event into the log, which */
/* indicates the end of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -911,7 +906,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -957,7 +952,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -969,39 +964,39 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_control PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_control PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function remaps the tx_interrupt_control service call so that */
-/* it can be tracked in the event log. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* This function remaps the tx_interrupt_control service call so that */
+/* it can be tracked in the event log. */
+/* */
+/* INPUT */
+/* */
/* new_posture New interrupt posture */
/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt posture */
-/* */
-/* CALLS */
-/* */
-/* _tx_thread_interrupt_control Interrupt control service */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt posture */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_interrupt_control Interrupt control service */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1014,7 +1009,7 @@ TX_INTERRUPT_SAVE_AREA
UINT old_posture;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
TX_DISABLE
TX_EL_KERNEL_CALL_EVENT_INSERT_INFO2(TX_EL_INTERRUPT_CONTROL, _tx_thread_current_ptr, new_posture)
@@ -1027,38 +1022,38 @@ UINT old_posture;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_on PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_on PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function disables all event filters. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function disables all event filters. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1072,39 +1067,39 @@ VOID _tx_el_event_log_on(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_off PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_off PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function sets all event filters, thereby turning event */
-/* logging off. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function sets all event filters, thereby turning event */
+/* logging off. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1118,38 +1113,38 @@ VOID _tx_el_event_log_off(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_set PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_set PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function sets the events filters specified by the user. */
-/* */
-/* INPUT */
-/* */
-/* filter Events to filter */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* INPUT */
+/* */
+/* filter Events to filter */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
diff --git a/ports/cortex_m3/ghs/src/tx_ghs.c b/ports/cortex_m3/ghs/src/tx_ghs.c
index 0be9d715c..30b8054e4 100644
--- a/ports/cortex_m3/ghs/src/tx_ghs.c
+++ b/ports/cortex_m3/ghs/src/tx_ghs.c
@@ -55,7 +55,7 @@ extern TX_THREAD *_tx_thread_current_ptr;
If you customize the System Library, you should remove ind_thrd.c
from the libsys.gpj subproject.
-
+
*/
/* Provide global __eh_globals value to support C++ exception handling
diff --git a/ports/cortex_m3/ghs/src/tx_thread_context_restore.arm b/ports/cortex_m3/ghs/src/tx_thread_context_restore.arm
index d89fcfd60..89e8f9d5d 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_context_save.arm b/ports/cortex_m3/ghs/src/tx_thread_context_save.arm
index 13cd6d9ec..ee496a2f3 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_m3/ghs/src/tx_thread_interrupt_control.arm
index fa8e83a68..114674c6a 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_m3/ghs/src/tx_thread_interrupt_disable.arm
index 26dcfec29..295219c16 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_m3/ghs/src/tx_thread_interrupt_restore.arm
index b850d47b7..f841f1779 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_schedule.arm b/ports/cortex_m3/ghs/src/tx_thread_schedule.arm
index 86ef0b206..aad9e090d 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_stack_build.arm b/ports/cortex_m3/ghs/src/tx_thread_stack_build.arm
index 30a47d88c..9e1494ea1 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_thread_system_return.arm b/ports/cortex_m3/ghs/src/tx_thread_system_return.arm
index a1cfe3377..d62b43fd3 100644
--- a/ports/cortex_m3/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_m3/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/ghs/src/tx_timer_interrupt.arm b/ports/cortex_m3/ghs/src/tx_timer_interrupt.arm
index 16d0c0319..c17b147e0 100644
--- a/ports/cortex_m3/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_m3/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S b/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S
index 4228fc110..e06430d7f 100644
--- a/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S
+++ b/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S
@@ -39,7 +39,7 @@ crt0_ctor_loop:
beq crt0_ctor_end
ldr r2, [r0]
add r0, #4
- push {r0-r1}
+ push {r0-r1}
blx r2
pop {r0-r1}
b crt0_ctor_loop
@@ -88,4 +88,3 @@ memory_set_done:
.section .stack, "wa", %nobits
.section .stack_process, "wa", %nobits
.section .heap, "wa", %nobits
-
\ No newline at end of file
diff --git a/ports/cortex_m3/gnu/example_build/cortexm3_vectors.S b/ports/cortex_m3/gnu/example_build/cortexm3_vectors.S
index 6ae558e4d..dc8d0aadb 100644
--- a/ports/cortex_m3/gnu/example_build/cortexm3_vectors.S
+++ b/ports/cortex_m3/gnu/example_build/cortexm3_vectors.S
@@ -4,8 +4,8 @@
.global __tx_BadHandler
.global __tx_SVCallHandler
.global __tx_DBGHandler
- .global __tx_PendSVHandler
- .global __tx_SysTickHandler
+ .global __tx_PendSVHandler
+ .global __tx_SysTickHandler
.global __tx_BadHandler
.syntax unified
@@ -15,9 +15,9 @@
.global _vectors
_vectors:
- .word __stack_end__
- .word reset_handler
- .word __tx_NMIHandler
+ .word __stack_end__
+ .word reset_handler
+ .word __tx_NMIHandler
.word __tx_HardfaultHandler
.word __tx_BadHandler
.word __tx_BadHandler
@@ -29,7 +29,7 @@ _vectors:
.word __tx_SVCallHandler //_SVC_Handler - used by Threadx scheduler //
.word __tx_DBGHandler
.word 0 // Reserved
- .word __tx_PendSVHandler
+ .word __tx_PendSVHandler
.word __tx_SysTickHandler // Used by Threadx timer functionality
.word __tx_BadHandler // Populate with user Interrupt handler
.word __tx_BadHandler
diff --git a/ports/cortex_m3/gnu/example_build/sample_threadx.c b/ports/cortex_m3/gnu/example_build/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m3/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_m3/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m3/gnu/example_build/sample_threadx.ld b/ports/cortex_m3/gnu/example_build/sample_threadx.ld
index c65a13464..3f19c29e0 100644
--- a/ports/cortex_m3/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_m3/gnu/example_build/sample_threadx.ld
@@ -10,7 +10,7 @@ __HEAPSIZE__ = 128;
SECTIONS
{
- .vectors :
+ .vectors :
{
KEEP(*(.vectors .vectors.*))
} > FLASH
@@ -45,7 +45,7 @@ SECTIONS
KEEP(*(.eh_frame*))
} > FLASH
- .ARM.extab :
+ .ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
@@ -59,7 +59,7 @@ SECTIONS
__data_load_start__ = ALIGN (4);
- .data : AT (__data_load_start__)
+ .data : AT (__data_load_start__)
{
__data_start__ = .;
@@ -89,7 +89,7 @@ SECTIONS
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
-
+
__data_end__ = .;
} > RAM
@@ -104,7 +104,7 @@ SECTIONS
__bss_end__ = .;
} > RAM
-
+
.heap (COPY):
{
__heap_start__ = ALIGN(4);
diff --git a/ports/cortex_m3/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_m3/gnu/example_build/tx_initialize_low_level.S
index c0dbf150a..1a7244100 100644
--- a/ports/cortex_m3/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m3/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,16 +73,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified Comment(s), fixed */
-/* GNU assembly comment, clean */
-/* up whitespace, resulting */
-/* in version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m3/gnu/inc/tx_port.h b/ports/cortex_m3/gnu/inc/tx_port.h
index 02d61f381..23affb8bf 100644
--- a/ports/cortex_m3/gnu/inc/tx_port.h
+++ b/ports/cortex_m3/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m3/gnu/readme_threadx.txt b/ports/cortex_m3/gnu/readme_threadx.txt
index d9063d65c..58181f851 100644
--- a/ports/cortex_m3/gnu/readme_threadx.txt
+++ b/ports/cortex_m3/gnu/readme_threadx.txt
@@ -5,15 +5,15 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the ARM
-GNU compiler. At this point you may run the build_threadx.bat batch file.
-This will build the ThreadX run-time environment in the "example_build"
-directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the ARM
+GNU compiler. At this point you may run the build_threadx.bat batch file.
+This will build the ThreadX run-time environment in the "example_build"
+directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -22,25 +22,25 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute on Cortex-M evaluation boards
or on a dedicated simulator.
-Building the demonstration is easy, simply execute the build_threadx_sample.bat
+Building the demonstration is easy, simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a binary
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a binary
file that can be downloaded and executed on the a simulator, or downloaded to a board.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
-you can change the build_threadx.bat file to remove the -g option and enable
-all compiler optimizations.
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
+you can change the build_threadx.bat file to remove the -g option and enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m3/gnu/src/tx_misra.S b/ports/cortex_m3/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m3/gnu/src/tx_misra.S
+++ b/ports/cortex_m3/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m3/gnu/src/tx_thread_context_restore.S b/ports/cortex_m3/gnu/src/tx_thread_context_restore.S
index f36f0e790..1862bb58d 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_context_save.S b/ports/cortex_m3/gnu/src/tx_thread_context_save.S
index bcc690d02..ac76a239f 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m3/gnu/src/tx_thread_interrupt_control.S
index e7ea870e2..a56149e33 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m3/gnu/src/tx_thread_interrupt_disable.S
index b0169c6d2..dee2237ff 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m3/gnu/src/tx_thread_interrupt_restore.S
index ef0298b4b..bd00f5f78 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_schedule.S b/ports/cortex_m3/gnu/src/tx_thread_schedule.S
index 22f4f38bd..9581ec389 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,18 +69,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_stack_build.S b/ports/cortex_m3/gnu/src/tx_thread_stack_build.S
index d78ebdc1a..5b7d97c41 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m3/gnu/src/tx_thread_system_return.S b/ports/cortex_m3/gnu/src/tx_thread_system_return.S
index 3fa0c7a2a..9d9a32fc9 100644
--- a/ports/cortex_m3/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m3/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m3/gnu/src/tx_timer_interrupt.S b/ports/cortex_m3/gnu/src/tx_timer_interrupt.S
index fc3e9db3c..7f9a43592 100644
--- a/ports/cortex_m3/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m3/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m3/iar/CMakeLists.txt b/ports/cortex_m3/iar/CMakeLists.txt
index a524d79f0..57be3aebc 100644
--- a/ports/cortex_m3/iar/CMakeLists.txt
+++ b/ports/cortex_m3/iar/CMakeLists.txt
@@ -7,7 +7,7 @@ target_sources(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_disable.S
- ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
diff --git a/ports/cortex_m3/iar/example_build/cstartup_M.s b/ports/cortex_m3/iar/example_build/cstartup_M.s
index 75d9369b3..d1c5aa3ea 100644
--- a/ports/cortex_m3/iar/example_build/cstartup_M.s
+++ b/ports/cortex_m3/iar/example_build/cstartup_M.s
@@ -2,16 +2,16 @@
PUBLIC __vector_table
SECTION .text:CODE:REORDER(1)
-
+
;; Keep vector table even if it's not referenced
REQUIRE __vector_table
-
+
THUMB
-
+
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
-
+
DATA
__vector_table
diff --git a/ports/cortex_m3/iar/example_build/sample_threadx.c b/ports/cortex_m3/iar/example_build/sample_threadx.c
index c67d75d04..a12160fa0 100644
--- a/ports/cortex_m3/iar/example_build/sample_threadx.c
+++ b/ports/cortex_m3/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,7 +85,7 @@ CHAR *pointer = TX_NULL;
#ifdef TX_ENABLE_EVENT_TRACE
tx_trace_enable(trace_buffer, sizeof(trace_buffer), 32);
#endif
-
+
/* Create a byte memory pool from which to allocate the thread stacks. */
tx_byte_pool_create(&byte_pool_0, "byte pool 0", byte_pool_memory, DEMO_BYTE_POOL_SIZE);
@@ -96,42 +96,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -139,23 +139,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -258,11 +258,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -321,7 +321,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -374,7 +374,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m3/iar/example_build/tx_initialize_low_level.s b/ports/cortex_m3/iar/example_build/tx_initialize_low_level.s
index 4a62fd946..bf7b64b08 100644
--- a/ports/cortex_m3/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m3/iar/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -73,12 +73,6 @@ __tx_free_memory_start
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m3/iar/inc/tx_port.h b/ports/cortex_m3/iar/inc/tx_port.h
index 54818730c..ff8b75ca2 100644
--- a/ports/cortex_m3/iar/inc/tx_port.h
+++ b/ports/cortex_m3/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m3/iar/readme_threadx.txt b/ports/cortex_m3/iar/readme_threadx.txt
index 28b54e035..388c40e6b 100644
--- a/ports/cortex_m3/iar/readme_threadx.txt
+++ b/ports/cortex_m3/iar/readme_threadx.txt
@@ -6,45 +6,45 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
2. Demonstration System
-The ThreadX demonstration is designed to execute under the IAR debugger under
+The ThreadX demonstration is designed to execute under the IAR debugger under
simulation.
Building the demonstration is easy; simply open the threadx.www workspace file,
-make the sample_threadx.ewp project the "active project" in the IAR Embedded
+make the sample_threadx.ewp project the "active project" in the IAR Embedded
Workbench, and select the "Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a
-binary ELF file that can be downloaded and executed on the IAR Windows-based
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a
+binary ELF file that can be downloaded and executed on the IAR Windows-based
Cortex-M simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup_M.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -53,7 +53,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -136,20 +136,20 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
+The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
The application may modify the vector area according to its needs.
@@ -188,14 +188,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m3/iar/src/tx_iar.c b/ports/cortex_m3/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m3/iar/src/tx_iar.c
+++ b/ports/cortex_m3/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m3/iar/src/tx_misra.s b/ports/cortex_m3/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m3/iar/src/tx_misra.s
+++ b/ports/cortex_m3/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m3/iar/src/tx_thread_context_restore.s b/ports/cortex_m3/iar/src/tx_thread_context_restore.s
index 35aeaf5b5..96b7d2d7e 100644
--- a/ports/cortex_m3/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m3/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_context_save.s b/ports/cortex_m3/iar/src/tx_thread_context_save.s
index f8bf5036c..9d575f8f7 100644
--- a/ports/cortex_m3/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m3/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m3/iar/src/tx_thread_interrupt_control.s
index a0f3a5d03..759522815 100644
--- a/ports/cortex_m3/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m3/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m3/iar/src/tx_thread_interrupt_disable.s
index 999af9646..ce7ceb62c 100644
--- a/ports/cortex_m3/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m3/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m3/iar/src/tx_thread_interrupt_restore.s
index 2e55ed273..3cc26d936 100644
--- a/ports/cortex_m3/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m3/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_schedule.s b/ports/cortex_m3/iar/src/tx_thread_schedule.s
index 882d20179..0ef3a88e6 100644
--- a/ports/cortex_m3/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m3/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_stack_build.s b/ports/cortex_m3/iar/src/tx_thread_stack_build.s
index 116ba71cc..eb2c3ffb9 100644
--- a/ports/cortex_m3/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m3/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m3/iar/src/tx_thread_system_return.s b/ports/cortex_m3/iar/src/tx_thread_system_return.s
index a19bd35db..712a6e5ce 100644
--- a/ports/cortex_m3/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m3/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m3/iar/src/tx_timer_interrupt.s b/ports/cortex_m3/iar/src/tx_timer_interrupt.s
index a2d8ca325..2801dd7d6 100644
--- a/ports/cortex_m3/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m3/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m3/keil/example_build/sample_threadx.c b/ports/cortex_m3/keil/example_build/sample_threadx.c
index 96c4eb5a2..34453f42f 100644
--- a/ports/cortex_m3/keil/example_build/sample_threadx.c
+++ b/ports/cortex_m3/keil/example_build/sample_threadx.c
@@ -77,35 +77,35 @@ void tx_application_define(void *first_unused_memory)
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- thread_0_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ thread_0_stack, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- thread_1_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ thread_1_stack, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- thread_2_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ thread_2_stack, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- thread_3_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ thread_3_stack, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- thread_4_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ thread_4_stack, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- thread_5_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ thread_5_stack, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Create the message queue shared by threads 1 and 2. */
@@ -189,11 +189,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -252,7 +252,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
diff --git a/ports/cortex_m3/keil/example_build/tx_initialize_low_level.s b/ports/cortex_m3/keil/example_build/tx_initialize_low_level.s
index 4ecf4ab23..9c6dd97c8 100644
--- a/ports/cortex_m3/keil/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m3/keil/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -121,12 +121,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m3/keil/inc/tx_port.h b/ports/cortex_m3/keil/inc/tx_port.h
index 04e83be97..6ec876dcb 100644
--- a/ports/cortex_m3/keil/inc/tx_port.h
+++ b/ports/cortex_m3/keil/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M3/Keil Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M3/Keil Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m3/keil/readme_threadx.txt b/ports/cortex_m3/keil/readme_threadx.txt
index 9cd94bc2b..7eee605ea 100644
--- a/ports/cortex_m3/keil/readme_threadx.txt
+++ b/ports/cortex_m3/keil/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M3
+ Microsoft's Azure RTOS ThreadX for Cortex-M3
Thumb & 32-bit Mode
@@ -6,29 +6,29 @@
1. Building the ThreadX run-time Library
-Building the ThreadX library is easy, simply load the project file
-ThreadX_Library.Uv2, which is located inside the "example_build" directory.
+Building the ThreadX library is easy, simply load the project file
+ThreadX_Library.Uv2, which is located inside the "example_build" directory.
Once the ThreadX library files are displayed in the project window,
select the "Build Target" operation and observe the compilation and assembly
-of the ThreadX library. This project build produces the ThreadX library
+of the ThreadX library. This project build produces the ThreadX library
file ThreadX_Library.lib.
2. Demonstration System
The ThreadX demonstration is designed to execute under the Keil simulator or
-Cortex-M3 hardware. This demonstration is slightly smaller than typical ThreadX
+Cortex-M3 hardware. This demonstration is slightly smaller than typical ThreadX
demonstrations, and thus requires less than 7KB of Flash and less than 4KB of RAM.
-Building the demonstration is easy; simply open the ThreadX demonstration
-project file ThreadX_Demo.Uv2, which is located inside the "example_build"
-directory.
+Building the demonstration is easy; simply open the ThreadX demonstration
+project file ThreadX_Demo.Uv2, which is located inside the "example_build"
+directory.
-Once open, select the "Build Target" operation and observe the compilation of
-sample_threadx.c (which is the demonstration application) and linking with
-ThreadX_Library.lib. The resulting file ThreadX_Demo.axf is a binary file that
-can be downloaded and executed under the uVision simulator or Cortex-M3 hardware.
+Once open, select the "Build Target" operation and observe the compilation of
+sample_threadx.c (which is the demonstration application) and linking with
+ThreadX_Library.lib. The resulting file ThreadX_Demo.axf is a binary file that
+can be downloaded and executed under the uVision simulator or Cortex-M3 hardware.
For simulator execution, the following memory regions need to be defined via
the "Debug -> Memory Map" dialog:
@@ -39,17 +39,17 @@ the "Debug -> Memory Map" dialog:
3. System Initialization
-The entry point in ThreadX for the Cortex-M3 using Keil tools is at label
-__main. This is defined within the Keil compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M3 using Keil tools is at label
+__main. This is defined within the Keil compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -58,11 +58,11 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M3 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
- Stack Offset Stack Contents
+ Stack Offset Stack Contents
0x00 r4
0x04 r5
@@ -84,21 +84,21 @@ tx_thread_stack_ptr in the associated thread control block TX_THREAD.
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the ThreadX_Library.Uv2
-project to debugging and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the ThreadX_Library.Uv2
+project to debugging and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M3
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
diff --git a/ports/cortex_m3/keil/src/tx_thread_context_restore.s b/ports/cortex_m3/keil/src/tx_thread_context_restore.s
index c7cd720df..bdb0e7824 100644
--- a/ports/cortex_m3/keil/src/tx_thread_context_restore.s
+++ b/ports/cortex_m3/keil/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -62,12 +62,6 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_context_save.s b/ports/cortex_m3/keil/src/tx_thread_context_save.s
index e6fe47cbb..09fc99591 100644
--- a/ports/cortex_m3/keil/src/tx_thread_context_save.s
+++ b/ports/cortex_m3/keil/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -61,12 +61,6 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_interrupt_control.s b/ports/cortex_m3/keil/src/tx_thread_interrupt_control.s
index 2d7fa49c6..29bf8f5c4 100644
--- a/ports/cortex_m3/keil/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m3/keil/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_interrupt_disable.s b/ports/cortex_m3/keil/src/tx_thread_interrupt_disable.s
index a63737abf..d40d4550c 100644
--- a/ports/cortex_m3/keil/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m3/keil/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(UINT new_posture)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_interrupt_restore.s b/ports/cortex_m3/keil/src/tx_thread_interrupt_restore.s
index 29ff36ec7..6661a9d39 100644
--- a/ports/cortex_m3/keil/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m3/keil/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_interrupt_restore(UINT new_posture)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_schedule.s b/ports/cortex_m3/keil/src/tx_thread_schedule.s
index afaa3082b..bef93a8e6 100644
--- a/ports/cortex_m3/keil/src/tx_thread_schedule.s
+++ b/ports/cortex_m3/keil/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,15 +71,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-02-2021 Scott Larson Modified comment(s), add */
-;/* low power code, */
-;/* resulting in version 6.1.5 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_stack_build.s b/ports/cortex_m3/keil/src/tx_thread_stack_build.s
index cf5cf6a32..a01b9daad 100644
--- a/ports/cortex_m3/keil/src/tx_thread_stack_build.s
+++ b/ports/cortex_m3/keil/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/cortex_m3/keil/src/tx_thread_system_return.s b/ports/cortex_m3/keil/src/tx_thread_system_return.s
index 80bb5259f..75f43ee59 100644
--- a/ports/cortex_m3/keil/src/tx_thread_system_return.s
+++ b/ports/cortex_m3/keil/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/cortex_m3/keil/src/tx_timer_interrupt.s b/ports/cortex_m3/keil/src/tx_timer_interrupt.s
index 2ad0ac89c..5946c7e6d 100644
--- a/ports/cortex_m3/keil/src/tx_timer_interrupt.s
+++ b/ports/cortex_m3/keil/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,12 +71,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/cortex_m33/ac6/example_build/ARMCM33_DSP_FP_TZ_config.txt b/ports/cortex_m33/ac6/example_build/ARMCM33_DSP_FP_TZ_config.txt
index 04e32d1f2..b65ba4c8b 100644
--- a/ports/cortex_m33/ac6/example_build/ARMCM33_DSP_FP_TZ_config.txt
+++ b/ports/cortex_m33/ac6/example_build/ARMCM33_DSP_FP_TZ_config.txt
@@ -14,7 +14,7 @@ cpu0.INITNSVTOR=0x0 # (int , init-time) defa
cpu0.SAU=0x8 # (int , init-time) default = '0x4' : Number of SAU regions (0 => no SAU) : [0x0..0x8]
cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset
cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set
-idau.NUM_IDAU_REGION=0x0 # (int , init-time) default = '0xA' :
+idau.NUM_IDAU_REGION=0x0 # (int , init-time) default = '0xA' :
cpu0.LOCK_SAU=0 # (bool , init-time) default = '0' : Lock down of SAU registers write
cpu0.LOCK_S_MPU=0 # (bool , init-time) default = '0' : Lock down of Secure MPU registers write
cpu0.LOCK_NS_MPU=0 # (bool , init-time) default = '0' : Lock down of Non-Secure MPU registers write
diff --git a/ports/cortex_m33/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h b/ports/cortex_m33/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
index 1eb74752e..262dc09b0 100644
--- a/ports/cortex_m33/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
+++ b/ports/cortex_m33/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'ThreadX_Library'
- * Target: 'ThreadX_Library_Project'
+ * Project: 'ThreadX_Library'
+ * Target: 'ThreadX_Library_Project'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM33_DSP_FP_TZ.h"
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/Abstract.txt b/ports/cortex_m33/ac6/example_build/demo_secure_zone/Abstract.txt
index 0d1d8c52b..f2b8a8192 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/Abstract.txt
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/Abstract.txt
@@ -1,10 +1,10 @@
This ARM Cortex-M33 secure/non-secure example project that
-shows the setup of the CMSIS-RTOS2 RTX for TrustZone for
-ARMv8-M applications.
+shows the setup of the CMSIS-RTOS2 RTX for TrustZone for
+ARMv8-M applications.
The application uses CMSIS and can be executed on a Fixed
-Virtual Platform (FVP) simulation model. The application
-demonstrates three RTOS threads.
+Virtual Platform (FVP) simulation model. The application
+demonstrates three RTOS threads.
Secure application:
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM33_DSP_FP_TZ/system_ARMCM33.c b/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM33_DSP_FP_TZ/system_ARMCM33.c
index 2df478aef..3d6252879 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM33_DSP_FP_TZ/system_ARMCM33.c
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/Device/ARMCM33_DSP_FP_TZ/system_ARMCM33.c
@@ -94,7 +94,7 @@ void SystemInit (void)
#endif
SystemCoreClock = SYSTEM_CLOCK;
-
+
*(uint32_t *)0xE000ED24 = 0x000F0000; /* S: enable secure, usage, bus, mem faults */
*(uint32_t *)0xE002ED24 = 0x000F0000; /* NS: enable secure, usage, bus, mem faults */
}
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index 65bfdcd7c..ebbc79c0e 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM33_DSP_FP_TZ.h"
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/interface.c b/ports/cortex_m33/ac6/example_build/demo_secure_zone/interface.c
index 4e6e8eeee..af6533c38 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/interface.c
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/interface.c
@@ -31,19 +31,19 @@
typedef funcptr funcptr_NS __attribute__((cmse_nonsecure_call));
/* Non-secure callable (entry) function */
-int func1(int x) __attribute__((cmse_nonsecure_entry)) {
- return x+3;
+int func1(int x) __attribute__((cmse_nonsecure_entry)) {
+ return x+3;
}
/* Non-secure callable (entry) function, calling a non-secure callback function */
int func2(funcptr callback, int x) __attribute__((cmse_nonsecure_entry)) {
funcptr_NS callback_NS; // non-secure callback function pointer
int y;
-
+
/* return function pointer with cleared LSB */
callback_NS = (funcptr_NS)cmse_nsfptr_create(callback);
-
+
y = callback_NS (x+1);
-
+
return (y+2);
}
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_ns.c b/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_ns.c
index a65b68807..04d857ff3 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_ns.c
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_ns.c
@@ -63,7 +63,7 @@ void ThreadA (void *argument) {
static int callbackB (int val) {
uint32_t flags;
-
+
flags = osThreadFlagsWait (1U, osFlagsWaitAny, osWaitForever);
if (flags == 1U) {
return (val+1);
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_s.c b/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_s.c
index 2c667821b..74fa242e4 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_s.c
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/main_s.c
@@ -24,36 +24,36 @@
* Title: Code template for secure main function
*
*---------------------------------------------------------------------------*/
-
+
/* Use CMSE intrinsics */
#include
#include
#include "RTE_Components.h"
#include CMSIS_device_header
-
+
/* TZ_START_NS: Start address of non-secure application */
#ifndef TZ_START_NS
#define TZ_START_NS (0x200000U)
#endif
-
+
/* typedef for non-secure callback functions */
typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
-
+
/* Secure main() */
int main(void) {
funcptr_void NonSecure_ResetHandler;
-
+
/* Add user setup code for secure part here*/
-
+
/* Set non-secure main stack (MSP_NS) */
__TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
-
+
/* Get non-secure reset handler */
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
-
+
/* Start non-secure state software application */
NonSecure_ResetHandler();
-
+
/* Non-secure software does not return, this code is not executed */
while (1) {
__NOP();
diff --git a/ports/cortex_m33/ac6/example_build/demo_secure_zone/tz_context.c b/ports/cortex_m33/ac6/example_build/demo_secure_zone/tz_context.c
index f31528909..ca7f0c56d 100644
--- a/ports/cortex_m33/ac6/example_build/demo_secure_zone/tz_context.c
+++ b/ports/cortex_m33/ac6/example_build/demo_secure_zone/tz_context.c
@@ -24,7 +24,7 @@
* Title: Context Management for ARMv8-M TrustZone - Sample implementation
*
*---------------------------------------------------------------------------*/
-
+
#include "RTE_Components.h"
#include CMSIS_device_header
#include "tz_context.h"
diff --git a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
index e4871014a..d0f6b08ba 100644
--- a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
+++ b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.c
@@ -24,17 +24,17 @@
*
* -----------------------------------------------------------------------------
*/
-
+
#include "cmsis_compiler.h"
#include "rtx_os.h"
-
+
// OS Idle Thread
__WEAK __NO_RETURN void osRtxIdleThread (void *argument) {
(void)argument;
for (;;) {}
}
-
+
// OS Error Callback function
__WEAK uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
(void)object_id;
diff --git a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
index 3021efbc8..49fc392ea 100644
--- a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
+++ b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/CMSIS/RTX_Config.h
@@ -24,52 +24,52 @@
*
* -----------------------------------------------------------------------------
*/
-
+
#ifndef RTX_CONFIG_H_
#define RTX_CONFIG_H_
-
+
#ifdef _RTE_
#include "RTE_Components.h"
#ifdef RTE_RTX_CONFIG_H
#include RTE_RTX_CONFIG_H
#endif
#endif
-
+
//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
-
+
// System Configuration
// =======================
-
+
// Global Dynamic Memory size [bytes] <0-1073741824:8>
// Defines the combined global dynamic memory size.
// Default: 4096
#ifndef OS_DYNAMIC_MEM_SIZE
#define OS_DYNAMIC_MEM_SIZE 4096
#endif
-
+
// Kernel Tick Frequency [Hz] <1-1000000>
// Defines base time unit for delays and timeouts.
// Default: 1000 (1ms tick)
#ifndef OS_TICK_FREQ
#define OS_TICK_FREQ 1000
#endif
-
+
// Round-Robin Thread switching
// Enables Round-Robin Thread switching.
#ifndef OS_ROBIN_ENABLE
#define OS_ROBIN_ENABLE 1
#endif
-
+
// Round-Robin Timeout <1-1000>
// Defines how many ticks a thread will execute before a thread switch.
// Default: 5
#ifndef OS_ROBIN_TIMEOUT
#define OS_ROBIN_TIMEOUT 5
#endif
-
+
//
-
-// ISR FIFO Queue
+
+// ISR FIFO Queue
// <4=> 4 entries <8=> 8 entries <12=> 12 entries <16=> 16 entries
// <24=> 24 entries <32=> 32 entries <48=> 48 entries <64=> 64 entries
// <96=> 96 entries <128=> 128 entries <196=> 196 entries <256=> 256 entries
@@ -78,38 +78,38 @@
#ifndef OS_ISR_FIFO_QUEUE
#define OS_ISR_FIFO_QUEUE 16
#endif
-
+
// Object Memory usage counters
// Enables object memory usage counters (requires RTX source variant).
#ifndef OS_OBJ_MEM_USAGE
#define OS_OBJ_MEM_USAGE 0
#endif
-
+
//
-
+
// Thread Configuration
// =======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_THREAD_OBJ_MEM
#define OS_THREAD_OBJ_MEM 0
#endif
-
+
// Number of user Threads <1-1000>
// Defines maximum number of user threads that can be active at the same time.
// Applies to user threads with system provided memory for control blocks.
#ifndef OS_THREAD_NUM
#define OS_THREAD_NUM 1
#endif
-
+
// Number of user Threads with default Stack size <0-1000>
// Defines maximum number of user threads with default stack size.
// Applies to user threads with zero stack size specified.
#ifndef OS_THREAD_DEF_STACK_NUM
#define OS_THREAD_DEF_STACK_NUM 0
#endif
-
+
// Total Stack size [bytes] for user Threads with user-provided Stack size <0-1073741824:8>
// Defines the combined stack size for user threads with user-provided stack size.
// Applies to user threads with user-provided stack size and system provided memory for stack.
@@ -117,23 +117,23 @@
#ifndef OS_THREAD_USER_STACK_SIZE
#define OS_THREAD_USER_STACK_SIZE 0
#endif
-
+
//
-
+
// Default Thread Stack size [bytes] <96-1073741824:8>
// Defines stack size for threads with zero stack size specified.
// Default: 256
#ifndef OS_STACK_SIZE
#define OS_STACK_SIZE 256
#endif
-
+
// Idle Thread Stack size [bytes] <72-1073741824:8>
// Defines stack size for Idle thread.
// Default: 256
#ifndef OS_IDLE_THREAD_STACK_SIZE
#define OS_IDLE_THREAD_STACK_SIZE 256
#endif
-
+
// Idle Thread TrustZone Module Identifier
// Defines TrustZone Thread Context Management Identifier.
// Applies only to cores with TrustZone technology.
@@ -141,49 +141,49 @@
#ifndef OS_IDLE_THREAD_TZ_MOD_ID
#define OS_IDLE_THREAD_TZ_MOD_ID 0
#endif
-
+
// Stack overrun checking
// Enables stack overrun check at thread switch.
// Enabling this option increases slightly the execution time of a thread switch.
#ifndef OS_STACK_CHECK
#define OS_STACK_CHECK 1
#endif
-
+
// Stack usage watermark
// Initializes thread stack with watermark pattern for analyzing stack usage.
// Enabling this option increases significantly the execution time of thread creation.
#ifndef OS_STACK_WATERMARK
#define OS_STACK_WATERMARK 0
#endif
-
-// Processor mode for Thread execution
-// <0=> Unprivileged mode
+
+// Processor mode for Thread execution
+// <0=> Unprivileged mode
// <1=> Privileged mode
// Default: Privileged mode
#ifndef OS_PRIVILEGE_MODE
#define OS_PRIVILEGE_MODE 1
#endif
-
+
//
-
+
// Timer Configuration
// ======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_TIMER_OBJ_MEM
#define OS_TIMER_OBJ_MEM 0
#endif
-
+
// Number of Timer objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_TIMER_NUM
#define OS_TIMER_NUM 1
#endif
-
+
//
-
+
// Timer Thread Priority
// <8=> Low
// <16=> Below Normal <24=> Normal <32=> Above Normal
@@ -194,7 +194,7 @@
#ifndef OS_TIMER_THREAD_PRIO
#define OS_TIMER_THREAD_PRIO 40
#endif
-
+
// Timer Thread Stack size [bytes] <0-1073741824:8>
// Defines stack size for Timer thread.
// May be set to 0 when timers are not used.
@@ -202,7 +202,7 @@
#ifndef OS_TIMER_THREAD_STACK_SIZE
#define OS_TIMER_THREAD_STACK_SIZE 256
#endif
-
+
// Timer Thread TrustZone Module Identifier
// Defines TrustZone Thread Context Management Identifier.
// Applies only to cores with TrustZone technology.
@@ -210,7 +210,7 @@
#ifndef OS_TIMER_THREAD_TZ_MOD_ID
#define OS_TIMER_THREAD_TZ_MOD_ID 0
#endif
-
+
// Timer Callback Queue entries <0-256>
// Number of concurrent active timer callback functions.
// May be set to 0 when timers are not used.
@@ -218,85 +218,85 @@
#ifndef OS_TIMER_CB_QUEUE
#define OS_TIMER_CB_QUEUE 4
#endif
-
+
//
-
+
// Event Flags Configuration
// ============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_EVFLAGS_OBJ_MEM
#define OS_EVFLAGS_OBJ_MEM 0
#endif
-
+
// Number of Event Flags objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_EVFLAGS_NUM
#define OS_EVFLAGS_NUM 1
#endif
-
+
//
-
+
//
-
+
// Mutex Configuration
// ======================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MUTEX_OBJ_MEM
#define OS_MUTEX_OBJ_MEM 0
#endif
-
+
// Number of Mutex objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MUTEX_NUM
#define OS_MUTEX_NUM 1
#endif
-
+
//
-
+
//
-
+
// Semaphore Configuration
// ==========================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_SEMAPHORE_OBJ_MEM
#define OS_SEMAPHORE_OBJ_MEM 0
#endif
-
+
// Number of Semaphore objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_SEMAPHORE_NUM
#define OS_SEMAPHORE_NUM 1
#endif
-
+
//
-
+
//
-
+
// Memory Pool Configuration
// ============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MEMPOOL_OBJ_MEM
#define OS_MEMPOOL_OBJ_MEM 0
#endif
-
+
// Number of Memory Pool objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MEMPOOL_NUM
#define OS_MEMPOOL_NUM 1
#endif
-
+
// Data Storage Memory size [bytes] <0-1073741824:8>
// Defines the combined data storage memory size.
// Applies to objects with system provided memory for data storage.
@@ -304,27 +304,27 @@
#ifndef OS_MEMPOOL_DATA_SIZE
#define OS_MEMPOOL_DATA_SIZE 0
#endif
-
+
//
-
+
//
-
+
// Message Queue Configuration
// ==============================
-
+
// Object specific Memory allocation
// Enables object specific memory allocation.
#ifndef OS_MSGQUEUE_OBJ_MEM
#define OS_MSGQUEUE_OBJ_MEM 0
#endif
-
+
// Number of Message Queue objects <1-1000>
// Defines maximum number of objects that can be active at the same time.
// Applies to objects with system provided memory for control blocks.
#ifndef OS_MSGQUEUE_NUM
#define OS_MSGQUEUE_NUM 1
#endif
-
+
// Data Storage Memory size [bytes] <0-1073741824:8>
// Defines the combined data storage memory size.
// Applies to objects with system provided memory for data storage.
@@ -332,26 +332,26 @@
#ifndef OS_MSGQUEUE_DATA_SIZE
#define OS_MSGQUEUE_DATA_SIZE 0
#endif
-
+
//
-
+
//
-
+
// Event Recorder Configuration
// ===============================
-
+
// Global Initialization
// Initialize Event Recorder during 'osKernelInitialize'.
#ifndef OS_EVR_INIT
#define OS_EVR_INIT 0
#endif
-
+
// Start recording
// Start event recording after initialization.
#ifndef OS_EVR_START
#define OS_EVR_START 1
#endif
-
+
// Global Event Filter Setup
// Initial recording level applied to all components.
// Error events
@@ -362,11 +362,11 @@
#ifndef OS_EVR_LEVEL
#define OS_EVR_LEVEL 0x00U
#endif
-
+
// RTOS Event Filter Setup
// Recording levels for RTX components.
// Only applicable if events for the respective component are generated.
-
+
// Memory Management
// Recording level for Memory Management events.
// Error events
@@ -374,10 +374,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MEMORY_LEVEL
+#ifndef OS_EVR_MEMORY_LEVEL
#define OS_EVR_MEMORY_LEVEL 0x01U
#endif
-
+
// Kernel
// Recording level for Kernel events.
// Error events
@@ -385,10 +385,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_KERNEL_LEVEL
+#ifndef OS_EVR_KERNEL_LEVEL
#define OS_EVR_KERNEL_LEVEL 0x01U
#endif
-
+
// Thread
// Recording level for Thread events.
// Error events
@@ -396,10 +396,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_THREAD_LEVEL
+#ifndef OS_EVR_THREAD_LEVEL
#define OS_EVR_THREAD_LEVEL 0x05U
#endif
-
+
// Generic Wait
// Recording level for Generic Wait events.
// Error events
@@ -407,10 +407,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_WAIT_LEVEL
+#ifndef OS_EVR_WAIT_LEVEL
#define OS_EVR_WAIT_LEVEL 0x01U
#endif
-
+
// Thread Flags
// Recording level for Thread Flags events.
// Error events
@@ -418,10 +418,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_THFLAGS_LEVEL
+#ifndef OS_EVR_THFLAGS_LEVEL
#define OS_EVR_THFLAGS_LEVEL 0x01U
#endif
-
+
// Event Flags
// Recording level for Event Flags events.
// Error events
@@ -429,10 +429,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_EVFLAGS_LEVEL
+#ifndef OS_EVR_EVFLAGS_LEVEL
#define OS_EVR_EVFLAGS_LEVEL 0x01U
#endif
-
+
// Timer
// Recording level for Timer events.
// Error events
@@ -440,10 +440,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_TIMER_LEVEL
+#ifndef OS_EVR_TIMER_LEVEL
#define OS_EVR_TIMER_LEVEL 0x01U
#endif
-
+
// Mutex
// Recording level for Mutex events.
// Error events
@@ -451,10 +451,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MUTEX_LEVEL
+#ifndef OS_EVR_MUTEX_LEVEL
#define OS_EVR_MUTEX_LEVEL 0x01U
#endif
-
+
// Semaphore
// Recording level for Semaphore events.
// Error events
@@ -462,10 +462,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_SEMAPHORE_LEVEL
+#ifndef OS_EVR_SEMAPHORE_LEVEL
#define OS_EVR_SEMAPHORE_LEVEL 0x01U
#endif
-
+
// Memory Pool
// Recording level for Memory Pool events.
// Error events
@@ -473,10 +473,10 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MEMPOOL_LEVEL
+#ifndef OS_EVR_MEMPOOL_LEVEL
#define OS_EVR_MEMPOOL_LEVEL 0x01U
#endif
-
+
// Message Queue
// Recording level for Message Queue events.
// Error events
@@ -484,87 +484,87 @@
// Operation events
// Detailed operation events
//
-#ifndef OS_EVR_MSGQUEUE_LEVEL
+#ifndef OS_EVR_MSGQUEUE_LEVEL
#define OS_EVR_MSGQUEUE_LEVEL 0x01U
#endif
-
+
//
-
+
//
-
+
// RTOS Event Generation
// Enables event generation for RTX components (requires RTX source variant).
-
+
// Memory Management
// Enables Memory Management event generation.
#ifndef OS_EVR_MEMORY
#define OS_EVR_MEMORY 1
#endif
-
+
// Kernel
// Enables Kernel event generation.
#ifndef OS_EVR_KERNEL
#define OS_EVR_KERNEL 1
#endif
-
+
// Thread
// Enables Thread event generation.
#ifndef OS_EVR_THREAD
#define OS_EVR_THREAD 1
#endif
-
+
// Generic Wait
// Enables Generic Wait event generation.
#ifndef OS_EVR_WAIT
#define OS_EVR_WAIT 1
#endif
-
+
// Thread Flags
// Enables Thread Flags event generation.
#ifndef OS_EVR_THFLAGS
#define OS_EVR_THFLAGS 1
#endif
-
+
// Event Flags
// Enables Event Flags event generation.
#ifndef OS_EVR_EVFLAGS
#define OS_EVR_EVFLAGS 1
#endif
-
+
// Timer
// Enables Timer event generation.
#ifndef OS_EVR_TIMER
#define OS_EVR_TIMER 1
#endif
-
+
// Mutex
// Enables Mutex event generation.
#ifndef OS_EVR_MUTEX
#define OS_EVR_MUTEX 1
#endif
-
+
// Semaphore
// Enables Semaphore event generation.
#ifndef OS_EVR_SEMAPHORE
#define OS_EVR_SEMAPHORE 1
#endif
-
+
// Memory Pool
// Enables Memory Pool event generation.
#ifndef OS_EVR_MEMPOOL
#define OS_EVR_MEMPOOL 1
#endif
-
+
// Message Queue
// Enables Message Queue event generation.
#ifndef OS_EVR_MSGQUEUE
#define OS_EVR_MSGQUEUE 1
#endif
-
+
//
-
+
//
-
+
// Number of Threads which use standard C/C++ library libspace
// (when thread specific memory allocation is not used).
#if (OS_THREAD_OBJ_MEM == 0)
@@ -572,7 +572,7 @@
#else
#define OS_THREAD_LIBSPACE_NUM OS_THREAD_NUM
#endif
-
+
//------------- <<< end of configuration section >>> ---------------------------
-
+
#endif // RTX_CONFIG_H_
diff --git a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index 78d1b429d..62e042d2f 100644
--- a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_threadx_non-secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_threadx_non-secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM33_DSP_FP_TZ.h"
diff --git a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
index 1eb74752e..262dc09b0 100644
--- a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
+++ b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/RTE/_ThreadX_Library_Project/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'ThreadX_Library'
- * Target: 'ThreadX_Library_Project'
+ * Project: 'ThreadX_Library'
+ * Target: 'ThreadX_Library_Project'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM33_DSP_FP_TZ.h"
diff --git a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
index 7257ac6d4..cea228899 100644
--- a/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
+++ b/ports/cortex_m33/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -68,7 +68,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -86,7 +86,7 @@ void tx_application_define(void *first_unused_memory)
CHAR *pointer;
(VOID)first_unused_memory; /* unused parameter. */
-
+
#ifdef TX_ENABLE_EVENT_TRACE
tx_trace_enable(trace_buffer, sizeof(trace_buffer), 32);
#endif
@@ -101,41 +101,41 @@ CHAR *pointer;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -143,23 +143,23 @@ CHAR *pointer;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -188,7 +188,7 @@ CHAR *pointer;
/* Release the block back to the pool. */
tx_block_release(pointer);
-
+
tx_thread_secure_stack_allocate(&thread_0,256);
tx_thread_secure_stack_allocate(&thread_1,256);
tx_thread_secure_stack_allocate(&thread_2,256);
@@ -206,13 +206,13 @@ CHAR *pointer;
void thread_0_entry(ULONG thread_input)
{
UINT status;
-
+
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply sits in while-forever-sleep loop. */
while(1)
{
-
+
/* Increment the thread counter. */
thread_0_counter++;
@@ -235,11 +235,11 @@ void thread_1_entry(ULONG thread_input)
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply sends messages to a queue shared by thread 2. */
while(1)
{
-
+
/* Increment the thread counter. */
thread_1_counter++;
@@ -263,7 +263,7 @@ ULONG received_message;
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread retrieves messages placed on the queue by thread 1. */
while(1)
{
@@ -274,11 +274,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -289,7 +289,7 @@ void thread_3_and_4_entry(ULONG thread_input)
{
UINT status;
-
+
/* This function is executed from thread 3 and thread 4. As the loop
below shows, these function compete for ownership of semaphore_0. */
while(1)
@@ -328,7 +328,7 @@ UINT status;
ULONG actual_flags;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply waits for an event in a forever loop. */
while(1)
{
@@ -337,7 +337,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -390,7 +390,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m33/ac6/example_build/tx_initialize_low_level.S b/ports/cortex_m33/ac6/example_build/tx_initialize_low_level.S
index 765b8174d..2f10e84a3 100644
--- a/ports/cortex_m33/ac6/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m33/ac6/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,12 +63,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m33/ac6/inc/tx_port.h b/ports/cortex_m33/ac6/inc/tx_port.h
index bf50152df..e2a8f6e6a 100644
--- a/ports/cortex_m33/ac6/inc/tx_port.h
+++ b/ports/cortex_m33/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M33 files. It unifies */
/* the Cortex-M33 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M33/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M33/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m33/ac6/inc/tx_secure_interface.h b/ports/cortex_m33/ac6/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m33/ac6/inc/tx_secure_interface.h
+++ b/ports/cortex_m33/ac6/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m33/ac6/readme_threadx.txt b/ports/cortex_m33/ac6/readme_threadx.txt
index 9311ffd44..a99a096a6 100644
--- a/ports/cortex_m33/ac6/readme_threadx.txt
+++ b/ports/cortex_m33/ac6/readme_threadx.txt
@@ -1,46 +1,46 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M33
+ Microsoft's Azure RTOS ThreadX for Cortex-M33
Using the AC6 Tools in Keil uVision
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first open
-the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first open
+the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
into Keil.
2. Building the ThreadX run-time Library
Building the ThreadX library is easy; simply set the ThreadX_Library project
-as active, then then build the library. You should now observe the compilation
+as active, then then build the library. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file ThreadX_Library.lib.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
3. Demonstration System
The ThreadX demonstration is designed to execute under the Keil debugger on the
FVP_MPS2_Cortex-M33_MDK simulator.
-Building the demonstration is easy; simply select the "Batch Build" button.
-You should now observe the compilation and assembly of the ThreadX demonstration of
-both the demo_secure_zone and demo_threadx_non-secure_zone projects.
+Building the demonstration is easy; simply select the "Batch Build" button.
+You should now observe the compilation and assembly of the ThreadX demonstration of
+both the demo_secure_zone and demo_threadx_non-secure_zone projects.
Then click the Start/Stop Debug Session button to start the simulator and begin debugging.
You are now ready to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-M33 using AC6 tools uses the standard AC6
+The entry point in ThreadX for the Cortex-M33 using AC6 tools uses the standard AC6
Cortex-M33 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M33 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,26 +132,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
6. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M33
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-M33 vectors start at the label __Vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
7.2 Managed Interrupts
@@ -177,7 +177,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -187,15 +187,15 @@ your_assembly_isr:
Note: the Cortex-M33 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.s file.
8. FPU Support
-ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m33/ac6/src/tx_initialize_low_level.S b/ports/cortex_m33/ac6/src/tx_initialize_low_level.S
index 04bd54c28..896abe063 100644
--- a/ports/cortex_m33/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_m33/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_misra.S b/ports/cortex_m33/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m33/ac6/src/tx_misra.S
+++ b/ports/cortex_m33/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m33/ac6/src/tx_thread_context_restore.S b/ports/cortex_m33/ac6/src/tx_thread_context_restore.S
index caaec9e6d..da331bccd 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_context_save.S b/ports/cortex_m33/ac6/src/tx_thread_context_save.S
index 71c1a1859..3519b6cb0 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m33/ac6/src/tx_thread_interrupt_control.S
index e2c9e1a59..a408e71da 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m33/ac6/src/tx_thread_interrupt_disable.S
index 03e63305d..8a56f098a 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m33/ac6/src/tx_thread_interrupt_restore.S
index d88390fc5..1a8e4767d 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_schedule.S b/ports/cortex_m33/ac6/src/tx_thread_schedule.S
index 1609d9026..5aec68b6d 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,23 +61,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* included tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -354,7 +338,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m33/ac6/src/tx_thread_secure_stack.c b/ports/cortex_m33/ac6/src/tx_thread_secure_stack.c
index 3f585b789..50b85fa17 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m33/ac6/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,21 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), and */
-/* changed name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_allocate.S
index 2b14e2274..e6cb78d23 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_free.S b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_free.S
index 33dc5fba1..a2ebaab47 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_initialize.S
index a5bab0f04..3413f31c4 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_stack_build.S b/ports/cortex_m33/ac6/src/tx_thread_stack_build.S
index 7d39f949c..02dcddf3c 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m33/ac6/src/tx_thread_system_return.S b/ports/cortex_m33/ac6/src/tx_thread_system_return.S
index 0a61cfc7f..3c97b666f 100644
--- a/ports/cortex_m33/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m33/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/tx_timer_interrupt.S b/ports/cortex_m33/ac6/src/tx_timer_interrupt.S
index b8cc2be52..1182f9107 100644
--- a/ports/cortex_m33/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m33/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m33/ac6/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m33/ac6/src/txe_thread_secure_stack_allocate.c
index 7d669a6f8..344e5fd99 100644
--- a/ports/cortex_m33/ac6/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m33/ac6/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m33/ac6/src/txe_thread_secure_stack_free.c b/ports/cortex_m33/ac6/src/txe_thread_secure_stack_free.c
index 55299fe96..768329756 100644
--- a/ports/cortex_m33/ac6/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m33/ac6/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m33/gnu/inc/tx_port.h b/ports/cortex_m33/gnu/inc/tx_port.h
index 08f0dab5f..727e9fce5 100644
--- a/ports/cortex_m33/gnu/inc/tx_port.h
+++ b/ports/cortex_m33/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M33 files. It unifies */
/* the Cortex-M33 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M33/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M33/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m33/gnu/inc/tx_secure_interface.h b/ports/cortex_m33/gnu/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m33/gnu/inc/tx_secure_interface.h
+++ b/ports/cortex_m33/gnu/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m33/gnu/readme_threadx.txt b/ports/cortex_m33/gnu/readme_threadx.txt
index c7d5774e6..79efe0eb8 100644
--- a/ports/cortex_m33/gnu/readme_threadx.txt
+++ b/ports/cortex_m33/gnu/readme_threadx.txt
@@ -1,32 +1,32 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M33
+ Microsoft's Azure RTOS ThreadX for Cortex-M33
Using the GNU Tools
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into a GNU project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
-No demonstration project is provided.
+No demonstration project is provided.
3. System Initialization
-The entry point in ThreadX for the Cortex-M33 using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M33 using gnu tools uses the standard GNU
Cortex-M33 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -35,7 +35,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M33 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -118,26 +118,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M33
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M33 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
@@ -170,15 +170,15 @@ your_assembly_isr:
Note: the Cortex-M33 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m33/gnu/src/tx_initialize_low_level.S b/ports/cortex_m33/gnu/src/tx_initialize_low_level.S
index 31a22a2b9..5915dc969 100644
--- a/ports/cortex_m33/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_m33/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,16 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_misra.S b/ports/cortex_m33/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m33/gnu/src/tx_misra.S
+++ b/ports/cortex_m33/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m33/gnu/src/tx_thread_context_restore.S b/ports/cortex_m33/gnu/src/tx_thread_context_restore.S
index fd4f14239..5d9d074a6 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_context_save.S b/ports/cortex_m33/gnu/src/tx_thread_context_save.S
index 60105cd4d..8d094cecd 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m33/gnu/src/tx_thread_interrupt_control.S
index a14922691..4ce5bc224 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m33/gnu/src/tx_thread_interrupt_disable.S
index a67dff034..463ceeee3 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m33/gnu/src/tx_thread_interrupt_restore.S
index 6adc1d357..63667fa80 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_schedule.S b/ports/cortex_m33/gnu/src/tx_thread_schedule.S
index 68368cd0c..601d89da3 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,24 +57,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -351,7 +334,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m33/gnu/src/tx_thread_secure_stack.c b/ports/cortex_m33/gnu/src/tx_thread_secure_stack.c
index ac0e90a18..82acdfbb4 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m33/gnu/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,21 +99,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* disable optimizations, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry, optimize(0)))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_allocate.S
index 9e875354d..7a45b3881 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_free.S b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_free.S
index bffb1d1ed..950f1ce95 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_initialize.S
index 945adb750..4d778d5c4 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_stack_build.S b/ports/cortex_m33/gnu/src/tx_thread_stack_build.S
index 036b82384..df938e5e2 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m33/gnu/src/tx_thread_system_return.S b/ports/cortex_m33/gnu/src/tx_thread_system_return.S
index 5649e3a78..17db56a59 100644
--- a/ports/cortex_m33/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m33/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/tx_timer_interrupt.S b/ports/cortex_m33/gnu/src/tx_timer_interrupt.S
index 2e2153437..869d81a7e 100644
--- a/ports/cortex_m33/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m33/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m33/gnu/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m33/gnu/src/txe_thread_secure_stack_allocate.c
index 7d669a6f8..344e5fd99 100644
--- a/ports/cortex_m33/gnu/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m33/gnu/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m33/gnu/src/txe_thread_secure_stack_free.c b/ports/cortex_m33/gnu/src/txe_thread_secure_stack_free.c
index 55299fe96..768329756 100644
--- a/ports/cortex_m33/gnu/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m33/gnu/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m33/iar/inc/tx_port.h b/ports/cortex_m33/iar/inc/tx_port.h
index 36afbf7e1..62f20620a 100644
--- a/ports/cortex_m33/iar/inc/tx_port.h
+++ b/ports/cortex_m33/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M33 files. It unifies */
/* the Cortex-M33 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M33/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M33/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m33/iar/inc/tx_secure_interface.h b/ports/cortex_m33/iar/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m33/iar/inc/tx_secure_interface.h
+++ b/ports/cortex_m33/iar/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m33/iar/readme_threadx.txt b/ports/cortex_m33/iar/readme_threadx.txt
index 7758306eb..ee6af2fa2 100644
--- a/ports/cortex_m33/iar/readme_threadx.txt
+++ b/ports/cortex_m33/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M33
+ Microsoft's Azure RTOS ThreadX for Cortex-M33
Using the IAR Tools
@@ -6,33 +6,33 @@
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into an IAR project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
No demonstration is provided because the IAR EWARM 8.50 simulator does
-not simulate the Cortex-M33 correctly.
+not simulate the Cortex-M33 correctly.
3. System Initialization
-The entry point in ThreadX for the Cortex-M33 using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M33 using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -41,7 +41,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M33 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -124,17 +124,17 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M33 vectors start at the label __vector_table and is typically defined in a
+The Cortex-M33 vectors start at the label __vector_table and is typically defined in a
startup.s file (or similar). The application may modify the vector area according to its needs.
@@ -182,14 +182,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M33 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m33/iar/src/tx_iar.c b/ports/cortex_m33/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m33/iar/src/tx_iar.c
+++ b/ports/cortex_m33/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m33/iar/src/tx_initialize_low_level.s b/ports/cortex_m33/iar/src/tx_initialize_low_level.s
index 16fec2187..8544e8a5b 100644
--- a/ports/cortex_m33/iar/src/tx_initialize_low_level.s
+++ b/ports/cortex_m33/iar/src/tx_initialize_low_level.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,13 +75,6 @@ __tx_free_memory_start
/* CALLED BY */
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_misra.s b/ports/cortex_m33/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m33/iar/src/tx_misra.s
+++ b/ports/cortex_m33/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m33/iar/src/tx_thread_context_restore.s b/ports/cortex_m33/iar/src/tx_thread_context_restore.s
index ec1e10eb3..3faf1113c 100644
--- a/ports/cortex_m33/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m33/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_context_save.s b/ports/cortex_m33/iar/src/tx_thread_context_save.s
index 2d5629f92..2c623b9b3 100644
--- a/ports/cortex_m33/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m33/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m33/iar/src/tx_thread_interrupt_control.s
index e268a93ff..c33f8b706 100644
--- a/ports/cortex_m33/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m33/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m33/iar/src/tx_thread_interrupt_disable.s
index c3b6c7d4c..7df58dbfd 100644
--- a/ports/cortex_m33/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m33/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m33/iar/src/tx_thread_interrupt_restore.s
index 5cea7a577..443a5d517 100644
--- a/ports/cortex_m33/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m33/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_schedule.s b/ports/cortex_m33/iar/src/tx_thread_schedule.s
index 231f69b57..af0f9196a 100644
--- a/ports/cortex_m33/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m33/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,23 +74,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -348,7 +332,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m33/iar/src/tx_thread_secure_stack.c b/ports/cortex_m33/iar/src/tx_thread_secure_stack.c
index f2cf79f57..4e4a7803a 100644
--- a/ports/cortex_m33/iar/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m33/iar/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,20 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m33/iar/src/tx_thread_secure_stack_allocate.s b/ports/cortex_m33/iar/src/tx_thread_secure_stack_allocate.s
index 49413f192..7a59008b6 100644
--- a/ports/cortex_m33/iar/src/tx_thread_secure_stack_allocate.s
+++ b/ports/cortex_m33/iar/src/tx_thread_secure_stack_allocate.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,13 +57,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_secure_stack_free.s b/ports/cortex_m33/iar/src/tx_thread_secure_stack_free.s
index 281feacb4..f3431f068 100644
--- a/ports/cortex_m33/iar/src/tx_thread_secure_stack_free.s
+++ b/ports/cortex_m33/iar/src/tx_thread_secure_stack_free.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,13 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_secure_stack_initialize.s b/ports/cortex_m33/iar/src/tx_thread_secure_stack_initialize.s
index 20d101eb4..c8e75cddc 100644
--- a/ports/cortex_m33/iar/src/tx_thread_secure_stack_initialize.s
+++ b/ports/cortex_m33/iar/src/tx_thread_secure_stack_initialize.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* CALLED BY */
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_stack_build.s b/ports/cortex_m33/iar/src/tx_thread_stack_build.s
index 51da3e87f..68adac043 100644
--- a/ports/cortex_m33/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m33/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m33/iar/src/tx_thread_system_return.s b/ports/cortex_m33/iar/src/tx_thread_system_return.s
index 9f2b721f9..442e0e141 100644
--- a/ports/cortex_m33/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m33/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/tx_timer_interrupt.s b/ports/cortex_m33/iar/src/tx_timer_interrupt.s
index edf7400b1..de3cbf409 100644
--- a/ports/cortex_m33/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m33/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,13 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m33/iar/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m33/iar/src/txe_thread_secure_stack_allocate.c
index 7d669a6f8..344e5fd99 100644
--- a/ports/cortex_m33/iar/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m33/iar/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m33/iar/src/txe_thread_secure_stack_free.c b/ports/cortex_m33/iar/src/txe_thread_secure_stack_free.c
index 55299fe96..768329756 100644
--- a/ports/cortex_m33/iar/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m33/iar/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m4/ac5/example_build/sample_threadx.c b/ports/cortex_m4/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m4/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_m4/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m4/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_m4/ac5/example_build/tx_initialize_low_level.s
index d6d6a6bfd..5f5e42b55 100644
--- a/ports/cortex_m4/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m4/ac5/example_build/tx_initialize_low_level.s
@@ -126,12 +126,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m4/ac5/inc/tx_port.h b/ports/cortex_m4/ac5/inc/tx_port.h
index 46304cd86..87b3dd5c1 100644
--- a/ports/cortex_m4/ac5/inc/tx_port.h
+++ b/ports/cortex_m4/ac5/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/AC5 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/AC5 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m4/ac5/readme_threadx.txt b/ports/cortex_m4/ac5/readme_threadx.txt
index b7b7cee96..e261213ee 100644
--- a/ports/cortex_m4/ac5/readme_threadx.txt
+++ b/ports/cortex_m4/ac5/readme_threadx.txt
@@ -5,14 +5,14 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the AC5
-compiler. At this point you may run the build_threadx.bat batch file. This will
-build the ThreadX run-time environment in the "example_build" directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the AC5
+compiler. At this point you may run the build_threadx.bat batch file. This will
+build the ThreadX run-time environment in the "example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -21,28 +21,28 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute under the ARM DS Cortex-M
simulator.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM DS Cortex-M
simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -51,7 +51,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -134,21 +134,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -187,8 +187,8 @@ your_assembly_isr
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m4/ac5/src/tx_thread_context_restore.s b/ports/cortex_m4/ac5/src/tx_thread_context_restore.s
index de72ba83d..f401e1470 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_context_save.s b/ports/cortex_m4/ac5/src/tx_thread_context_save.s
index 572f40a88..16d7536e2 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_m4/ac5/src/tx_thread_interrupt_control.s
index c64bac49c..f3e273edc 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_m4/ac5/src/tx_thread_interrupt_disable.s
index 58191f136..555691e4c 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_m4/ac5/src/tx_thread_interrupt_restore.s
index 0564cfc58..7eb19d651 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_schedule.s b/ports/cortex_m4/ac5/src/tx_thread_schedule.s
index f6ff95103..f11a31c7e 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_stack_build.s b/ports/cortex_m4/ac5/src/tx_thread_stack_build.s
index ce5e27db8..5d090bbcd 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m4/ac5/src/tx_thread_system_return.s b/ports/cortex_m4/ac5/src/tx_thread_system_return.s
index b32ebf2e0..06d5ccaeb 100644
--- a/ports/cortex_m4/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_m4/ac5/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m4/ac5/src/tx_timer_interrupt.s b/ports/cortex_m4/ac5/src/tx_timer_interrupt.s
index 3e66442be..e2682bf3c 100644
--- a/ports/cortex_m4/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_m4/ac5/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m4/ac6/example_build/sample_threadx/.cproject b/ports/cortex_m4/ac6/example_build/sample_threadx/.cproject
index c131df5e9..f33573543 100644
--- a/ports/cortex_m4/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_m4/ac6/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m4/ac6/example_build/sample_threadx/exceptions.c b/ports/cortex_m4/ac6/example_build/sample_threadx/exceptions.c
index 94c87d7a4..f0dd86004 100644
--- a/ports/cortex_m4/ac6/example_build/sample_threadx/exceptions.c
+++ b/ports/cortex_m4/ac6/example_build/sample_threadx/exceptions.c
@@ -1,7 +1,7 @@
/*
** Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
** Use, modification and redistribution of this file is subject to your possession of a
-** valid End User License Agreement for the Arm Product of which these examples are part of
+** valid End User License Agreement for the Arm Product of which these examples are part of
** and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.scat
index eb8e0c236..1b489e7db 100644
--- a/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_m4/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_m4/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_m4/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index c60db6003..16dd113ed 100644
--- a/ports/cortex_m4/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_m4/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -75,12 +75,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
diff --git a/ports/cortex_m4/ac6/example_build/tx/.cproject b/ports/cortex_m4/ac6/example_build/tx/.cproject
index 91e9ca8fd..3e44eb068 100644
--- a/ports/cortex_m4/ac6/example_build/tx/.cproject
+++ b/ports/cortex_m4/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m4/ac6/inc/tx_port.h b/ports/cortex_m4/ac6/inc/tx_port.h
index d1c658593..fa109c522 100644
--- a/ports/cortex_m4/ac6/inc/tx_port.h
+++ b/ports/cortex_m4/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m4/ac6/readme_threadx.txt b/ports/cortex_m4/ac6/readme_threadx.txt
index d98c90cbe..6447c5177 100644
--- a/ports/cortex_m4/ac6/readme_threadx.txt
+++ b/ports/cortex_m4/ac6/readme_threadx.txt
@@ -5,12 +5,12 @@
1. Building the ThreadX run-time Library
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -20,27 +20,27 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
MPS2_Cortex_Mx Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-mx_tx.launch' file, click
'Debug As', and then click 'cortex-mx_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m4/ac6/src/tx_misra.S b/ports/cortex_m4/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m4/ac6/src/tx_misra.S
+++ b/ports/cortex_m4/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m4/ac6/src/tx_thread_context_restore.S b/ports/cortex_m4/ac6/src/tx_thread_context_restore.S
index d60cf6b80..330789f4f 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_context_save.S b/ports/cortex_m4/ac6/src/tx_thread_context_save.S
index abc0ac5d8..a6c1a053b 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m4/ac6/src/tx_thread_interrupt_control.S
index 76b114b84..51b0e3fe3 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m4/ac6/src/tx_thread_interrupt_disable.S
index b2fb050d1..df262e8cd 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m4/ac6/src/tx_thread_interrupt_restore.S
index 47c8f0f9e..d3e167bdb 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_schedule.S b/ports/cortex_m4/ac6/src/tx_thread_schedule.S
index b02b6eeea..0b15b4de7 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,16 +71,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_stack_build.S b/ports/cortex_m4/ac6/src/tx_thread_stack_build.S
index 8cdaa034a..5ae2c8f74 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m4/ac6/src/tx_thread_system_return.S b/ports/cortex_m4/ac6/src/tx_thread_system_return.S
index f75b1e7ae..b4348f9db 100644
--- a/ports/cortex_m4/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m4/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m4/ac6/src/tx_timer_interrupt.S b/ports/cortex_m4/ac6/src/tx_timer_interrupt.S
index f1f39c3f2..1a52ecda8 100644
--- a/ports/cortex_m4/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m4/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m4/ghs/example_build/sample_threadx.c b/ports/cortex_m4/ghs/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m4/ghs/example_build/sample_threadx.c
+++ b/ports/cortex_m4/ghs/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m4/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_m4/ghs/example_build/tx_initialize_low_level.arm
index 03a9a100c..1a144b7bc 100644
--- a/ports/cortex_m4/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_m4/ghs/example_build/tx_initialize_low_level.arm
@@ -1,18 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Initialize */
/** */
@@ -24,42 +24,42 @@
.text
.align 4
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_initialize_low_level Cortex-M4/GHS */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level Cortex-M4/GHS */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for any low-level processor */
-/* initialization, including setting up interrupt vectors, setting */
-/* up a periodic timer interrupt source, saving the system stack */
-/* pointer for use in ISR processing later, and finding the first */
-/* available RAM memory address for tx_application_define. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -71,7 +71,7 @@
_tx_initialize_low_level:
/* Disable interrupts. */
-
+
CPSID i ; Disable interrupts
@@ -79,7 +79,7 @@ _tx_initialize_low_level:
/* _tx_thread_system_stack_ptr = (VOID_PTR) (sp); */
LDR r1,=_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- STR sp, [r1] ; Save system stack
+ STR sp, [r1] ; Save system stack
/* Save the first available memory address. */
@@ -95,14 +95,14 @@ _tx_initialize_low_level:
LDR r0, =0xE0001000 ; Build address of DWT register
LDR r1, [r0] ; Pickup the current value
ORR r1, r1, 1 ; Set the CYCCNTENA bit
- STR r1, [r0] ; Enable the cycle count register
+ STR r1, [r0] ; Enable the cycle count register
/* Setup Vector Table Offset Register. */
-
+
MOV r0, 0xE000E000 ; Build address of NVIC registers
LDR r1, =__vectors ; Pickup address of vector table
- STR r1, [r0, 0xD08] ; Set vector table address
+ STR r1, [r0, 0xD08] ; Set vector table address
/* Configure SysTick for 100Hz clock, or 16384 cycles if no reference. */
@@ -134,7 +134,7 @@ _tx_initialize_low_level:
#endif
/* Return to caller. */
-
+
BX lr ; Return to caller
.type _tx_initialize_low_level,$function
@@ -145,7 +145,7 @@ _tx_initialize_low_level:
/* Define shells for each of the interrupt vectors. */
.globl __tx_BadHandler
-__tx_BadHandler:
+__tx_BadHandler:
B __tx_BadHandler
.type __tx_BadHandler,$function
@@ -161,7 +161,7 @@ __tx_IntHandler:
MOV r0, 0 ; Build interrupt code
BL _tx_el_interrupt ; Call interrupt event logging
#endif
-
+
; /* Do interrupt handler work here */
; /* .... */
@@ -199,7 +199,7 @@ __tx_SysTickHandler:
.size __tx_SysTickHandler,.-__tx_SysTickHandler
- .globl __tx_NMIHandler
+ .globl __tx_NMIHandler
__tx_NMIHandler:
B __tx_NMIHandler
@@ -220,7 +220,7 @@ __tx_SVCallHandler:
B __tx_SVCallHandler
.type __tx_SVCallHandler,$function
- .size __tx_SVCallHandler,.-__tx_SVCallHandler
+ .size __tx_SVCallHandler,.-__tx_SVCallHandler
/* Reference build options and version ID to ensure they come in. */
diff --git a/ports/cortex_m4/ghs/inc/tx_el.h b/ports/cortex_m4/ghs/inc/tx_el.h
index 4662f2416..72e5bbe35 100644
--- a/ports/cortex_m4/ghs/inc/tx_el.h
+++ b/ports/cortex_m4/ghs/inc/tx_el.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
@@ -20,27 +21,21 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* COMPONENT DEFINITION RELEASE */
-/* */
-/* tx_el.h PORTABLE C/GHS */
+/**************************************************************************/
+/* */
+/* COMPONENT DEFINITION RELEASE */
+/* */
+/* tx_el.h PORTABLE C/GHS */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file defines the ThreadX event log functions for the GHS MULTI */
-/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
-/* already been included. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This file defines the ThreadX event log functions for the GHS MULTI */
+/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
+/* already been included. */
/* */
/**************************************************************************/
@@ -53,16 +48,16 @@
#define TX_EL_VERSION_ID 2 /* Event log version ID */
#define TX_EL_HEADER_SIZE 24 /* Event log header size */
#define TX_EL_TNIS 16 /* Number of thread names supported */
- /* If the application needs to */
- /* track more thread names, just */
- /* increase this number and re- */
- /* build the ThreadX library. */
+ /* If the application needs to */
+ /* track more thread names, just */
+ /* increase this number and re- */
+ /* build the ThreadX library. */
#define TX_EL_TNI_ENTRY_SIZE 44 /* Thread name entries are 44 bytes */
#define TX_EL_TNI_NAME_SIZE 34 /* Thread name size in TNI */
#define TX_EL_NO_MORE_TNI_ROOM 1 /* Error return from thread register*/
-#define TX_EL_NAME_NOT_FOUND 2 /* Error return from un-register */
+#define TX_EL_NAME_NOT_FOUND 2 /* Error return from un-register */
#define TX_EL_EVENT_SIZE 32 /* Number of bytes in each event */
-#define TX_EL_VALID_ENTRY 1 /* Valid log entry */
+#define TX_EL_VALID_ENTRY 1 /* Valid log entry */
#define TX_EL_INVALID_ENTRY 0 /* Invalid log entry */
@@ -295,7 +290,7 @@
/* Define filter macros that are inserted in-line with the other macros below. */
-#ifdef TX_ENABLE_EVENT_FILTERS
+#ifdef TX_ENABLE_EVENT_FILTERS
#define TX_EL_NO_STATUS_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_STATUS_CHANGE)) {
#define TX_EL_NO_INTERRUPT_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_INTERRUPTS)) {
#define TX_EL_NO_THREAD_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_THREAD_CALLS)) {
@@ -430,7 +425,7 @@ extern ULONG _tx_el_time_base_lower;
VOID _tx_el_initialize(VOID);
UINT _tx_el_thread_register(TX_THREAD *thread_ptr);
UINT _tx_el_thread_unregister(TX_THREAD *thread_ptr);
-VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
+VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
ULONG info_3, ULONG info_4);
VOID _tx_el_thread_running(TX_THREAD *thread_ptr);
VOID _tx_el_thread_preempted(TX_THREAD *thread_ptr);
@@ -747,7 +742,7 @@ VOID _tx_el_event_filter_set(UINT filter);
#define TX_EL_THREAD_UNREGISTER(a) \
_tx_el_thread_unregister(a);
#define TX_EL_INITIALIZE _tx_el_initialize();
-#endif
+#endif
#else
#define TX_EL_KERNEL_CALL_EVENT_INSERT_INFO4(a, b, c, d, e)
#define TX_EL_KERNEL_CALL_EVENT_INSERT_INFO3(a, b, c, d)
diff --git a/ports/cortex_m4/ghs/inc/tx_port.h b/ports/cortex_m4/ghs/inc/tx_port.h
index 5d6b9be18..4382845ae 100644
--- a/ports/cortex_m4/ghs/inc/tx_port.h
+++ b/ports/cortex_m4/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -61,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -112,7 +104,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -123,8 +115,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -133,7 +125,7 @@ typedef unsigned short USHORT;
*/
#ifndef TX_TRACE_TIME_SOURCE
-#define TX_TRACE_TIME_SOURCE *((ULONG *) 0xE0001004)
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0xE0001004)
#endif
#ifndef TX_TRACE_TIME_MASK
#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
@@ -145,13 +137,13 @@ typedef unsigned short USHORT;
/* Define the number of ticks per second. This informs the EventAnalyzer what the timestamps
represent. By default, this is set to 1,000,000 i.e., one tick every microsecond. */
-#define TX_EL_TICKS_PER_SECOND 1000000
+#define TX_EL_TICKS_PER_SECOND 1000000
/* Define the method of how to get the upper and lower 32-bits of the time stamp. By default, simply
- simulate the time-stamp source with a counter. */
+ simulate the time-stamp source with a counter. */
-#define read_tbu() _tx_el_time_base_upper
-#define read_tbl() ++_tx_el_time_base_lower
+#define read_tbu() _tx_el_time_base_upper
+#define read_tbl() ++_tx_el_time_base_lower
/* Define the port specific options for the _tx_build_options variable. This variable indicates
@@ -167,7 +159,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -179,19 +171,19 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 VOID * tx_thread_eh_globals; \
int Errno; /* errno. */ \
char * strtok_saved_pos; /* strtok() position. */
#ifndef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
#else
#define TX_THREAD_EXTENSION_3 unsigned long long tx_thread_execution_time_total; \
- unsigned long long tx_thread_execution_time_last_start;
+ unsigned long long tx_thread_execution_time_last_start;
#endif
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -240,7 +232,7 @@ typedef unsigned short USHORT;
extern void __tx_cpp_exception_cleanup(TX_THREAD *thread_ptr); \
__tx_cpp_exception_cleanup(thread_ptr); \
}
-#else
+#else
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) \
{ \
#pragma weak __cpp_exception_cleanup \
@@ -279,7 +271,7 @@ typedef unsigned short USHORT;
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | __MRS(__IPSR))
#endif
@@ -291,32 +283,32 @@ typedef unsigned short USHORT;
zero after initialization for Cortex-M ports. */
#ifndef TX_THREAD_SYSTEM_RETURN_CHECK
-#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
+#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = __CLZ32(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -386,7 +378,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/GHS Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/GHS Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_m4/ghs/readme_threadx.txt b/ports/cortex_m4/ghs/readme_threadx.txt
index 86a495228..f57a16792 100644
--- a/ports/cortex_m4/ghs/readme_threadx.txt
+++ b/ports/cortex_m4/ghs/readme_threadx.txt
@@ -4,16 +4,16 @@
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,52 +21,52 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-M4 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-M4 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-M4 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -75,7 +75,7 @@ to tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M4 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
@@ -159,21 +159,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
7. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
8. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -185,7 +185,7 @@ the vector area according to its needs.
8.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -194,7 +194,7 @@ Here is the standard template for managed ISRs in ThreadX:
__tx_IntHandler:
PUSH {lr}
BL _tx_thread_context_save
-
+
/* Do interrupt handler work here */
B _tx_thread_context_restore
@@ -204,7 +204,7 @@ __tx_IntHandler:
By default, FPU support is disabled for each thread. If saving the context of the FPU registers
is needed, the ThreadX library should be re-built with TX_ENABLE_FPU_SUPPORT defined. In addition,
-the following API call must be made from the context of the application thread - before
+the following API call must be made from the context of the application thread - before
the FPU usage:
void tx_thread_fpu_enable(void);
@@ -231,7 +231,7 @@ information associated with this specific port of ThreadX:
03-02-2021 The following files were changed/added for version 6.1.5:
tx_thread_schedule.s Added low power feature
-05/19/2020 Initial ThreadX version of Cortex-M4/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-M4/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_m4/ghs/src/tx_el.c b/ports/cortex_m4/ghs/src/tx_el.c
index fd58768f9..b5d3b8b73 100644
--- a/ports/cortex_m4/ghs/src/tx_el.c
+++ b/ports/cortex_m4/ghs/src/tx_el.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
/** */
@@ -49,44 +50,38 @@ extern TX_THREAD *_tx_thread_current_ptr;
UINT _tx_thread_interrupt_control(UINT new_posture);
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_initialize PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_initialize PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function creates the Event Log (in the format dictated by the */
-/* GHS Event Analyzer) and sets up various information for subsequent */
-/* operation. The start and end of the Event Log is determined by the */
-/* .eventlog section in the linker control file. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function creates the Event Log (in the format dictated by the */
+/* GHS Event Analyzer) and sets up various information for subsequent */
+/* operation. The start and end of the Event Log is determined by the */
+/* .eventlog section in the linker control file. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
@@ -150,7 +145,7 @@ UINT i;
/* Setup event_ptr (pointer to oldest event) field to the start
of the event pool. */
- *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
+ *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
(TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = work_ptr + sizeof(ULONG);
@@ -166,17 +161,17 @@ UINT i;
/* Clear the entire TNI array, this is the initial setting. */
end_ptr = work_ptr + (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE);
memset((void *)work_ptr, 0, (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* At this point, we are pointing at the actual Event Entry area. */
-
+
/* Remember the start of the actual event log area. */
_tx_el_event_area_start = work_ptr;
/* Clear the entire Event area. */
end_ptr = work_ptr + event_log_size;
memset((void *)work_ptr, 0, event_log_size);
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* Save the end pointer for later use. */
_tx_el_event_area_end = work_ptr;
@@ -201,7 +196,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID to NULL. */
@@ -216,40 +211,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_register PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_register PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function registers a thread in the event log for future */
+/* */
+/* This function registers a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -278,7 +273,7 @@ UINT i;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Check to see if there were no more valid entries. */
if (i >= TX_EL_TNIS)
return(TX_EL_NO_MORE_TNI_ROOM);
@@ -304,7 +299,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID. */
@@ -321,40 +316,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_unregister PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_unregister PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function unregisters a thread in the event log for future */
+/* */
+/* This function unregisters a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -394,7 +389,7 @@ UINT i, j;
}
else if (*work_ptr == 0)
{
-
+
/* Null terminated, just break the loop. */
break;
}
@@ -426,7 +421,7 @@ UINT i, j;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Determine status to return. */
if (found)
return(TX_SUCCESS);
@@ -435,49 +430,49 @@ UINT i, j;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_user_event_insert PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_user_event_insert PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a user event into the event log. */
-/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* If the event log is full, the oldest event is overwritten. */
+/* */
+/* INPUT */
+/* */
/* sub_type Event subtype for kernel call */
/* info_1 First information field */
/* info_2 Second information field */
/* info_3 Third information field */
/* info_4 Fourth information field */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* */
/**************************************************************************/
-VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
+VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
ULONG info_3, ULONG info_4)
{
@@ -545,7 +540,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -558,41 +553,41 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_running PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_running PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread change event into the event */
/* log, which indicates that a context switch is taking place. */
/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_schedule ThreadX scheduler */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_schedule ThreadX scheduler */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -604,7 +599,7 @@ VOID _tx_el_thread_running(TX_THREAD *thread_ptr)
UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -646,7 +641,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -658,43 +653,43 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_preempted PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_preempted PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread preempted event into the event */
/* log, which indicates that an interrupt occurred that made a higher */
/* priority thread ready for execution. In this case, the previously */
/* executing thread has an event entered to indicate it is no longer */
/* running. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_context_restore ThreadX context restore */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_context_restore ThreadX context restore */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -707,7 +702,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -749,7 +744,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -761,40 +756,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt event into the log, which */
/* indicates the start of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -807,7 +802,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -853,7 +848,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -865,40 +860,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_end PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_end PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt end event into the log, which */
/* indicates the end of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -911,7 +906,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -957,7 +952,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -969,39 +964,39 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_control PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_control PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function remaps the tx_interrupt_control service call so that */
-/* it can be tracked in the event log. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* This function remaps the tx_interrupt_control service call so that */
+/* it can be tracked in the event log. */
+/* */
+/* INPUT */
+/* */
/* new_posture New interrupt posture */
/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt posture */
-/* */
-/* CALLS */
-/* */
-/* _tx_thread_interrupt_control Interrupt control service */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt posture */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_interrupt_control Interrupt control service */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1014,7 +1009,7 @@ TX_INTERRUPT_SAVE_AREA
UINT old_posture;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
TX_DISABLE
TX_EL_KERNEL_CALL_EVENT_INSERT_INFO2(TX_EL_INTERRUPT_CONTROL, _tx_thread_current_ptr, new_posture)
@@ -1027,38 +1022,38 @@ UINT old_posture;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_on PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_on PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function disables all event filters. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function disables all event filters. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1072,39 +1067,39 @@ VOID _tx_el_event_log_on(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_off PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_off PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function sets all event filters, thereby turning event */
-/* logging off. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function sets all event filters, thereby turning event */
+/* logging off. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1118,38 +1113,38 @@ VOID _tx_el_event_log_off(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_set PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_set PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function sets the events filters specified by the user. */
-/* */
-/* INPUT */
-/* */
-/* filter Events to filter */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* INPUT */
+/* */
+/* filter Events to filter */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
diff --git a/ports/cortex_m4/ghs/src/tx_ghs.c b/ports/cortex_m4/ghs/src/tx_ghs.c
index 0be9d715c..30b8054e4 100644
--- a/ports/cortex_m4/ghs/src/tx_ghs.c
+++ b/ports/cortex_m4/ghs/src/tx_ghs.c
@@ -55,7 +55,7 @@ extern TX_THREAD *_tx_thread_current_ptr;
If you customize the System Library, you should remove ind_thrd.c
from the libsys.gpj subproject.
-
+
*/
/* Provide global __eh_globals value to support C++ exception handling
diff --git a/ports/cortex_m4/ghs/src/tx_thread_context_restore.arm b/ports/cortex_m4/ghs/src/tx_thread_context_restore.arm
index 4a15e661e..900640835 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m4/ghs/src/tx_thread_context_save.arm b/ports/cortex_m4/ghs/src/tx_thread_context_save.arm
index 4ee07714b..284e9ac66 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m4/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_m4/ghs/src/tx_thread_interrupt_control.arm
index 62d2391fb..b7cfe4fcb 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m4/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_m4/ghs/src/tx_thread_interrupt_disable.arm
index 57292d507..06a571d3e 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -81,4 +81,4 @@ _tx_thread_interrupt_disable:
;
;}
.type _tx_thread_interrupt_disable,$function
- .size _tx_thread_interrupt_disable,.-_tx_thread_interrupt_disable
+ .size _tx_thread_interrupt_disable,.-_tx_thread_interrupt_disable
diff --git a/ports/cortex_m4/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_m4/ghs/src/tx_thread_interrupt_restore.arm
index 8b38ea80c..12a1307aa 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -72,4 +72,4 @@ _tx_thread_interrupt_restore:
;
;}
.type _tx_thread_interrupt_restore,$function
- .size _tx_thread_interrupt_restore,.-_tx_thread_interrupt_restore
+ .size _tx_thread_interrupt_restore,.-_tx_thread_interrupt_restore
diff --git a/ports/cortex_m4/ghs/src/tx_thread_schedule.arm b/ports/cortex_m4/ghs/src/tx_thread_schedule.arm
index efc8f6677..dc15054aa 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -85,7 +85,7 @@ _tx_thread_schedule:
;
#ifdef __VFP__
MRS r0, CONTROL ; Pickup current CONTROL register
- BIC r0, r0, #4 ; Clear the FPCA bit
+ BIC r0, r0, #4 ; Clear the FPCA bit
MSR CONTROL, r0 ; Setup new CONTROL register
#endif
;
@@ -118,8 +118,8 @@ PendSV_Handler:
__tx_PendSVHandler:
;
; /* Get current thread value and new thread pointer. */
-;
-__tx_ts_handler:
+;
+__tx_ts_handler:
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
@@ -137,7 +137,7 @@ __tx_ts_handler:
LDR r1, [r0] ; Pickup current thread pointer
;
; /* Determine if there is a current thread to finish preserving. */
-;
+;
CBZ r1, __tx_ts_new ; If NULL, skip preservation
;
; /* Recover PSP and preserve current thread context. */
@@ -212,7 +212,7 @@ __tx_ts_restore:
LDR.W LR, [r12], #4 ; Pickup LR
#ifdef __VFP__
TST LR, #0x10 ; Determine if the VFP extended frame is present
- BNE _skip_vfp_restore ; If not, skip VFP restore
+ BNE _skip_vfp_restore ; If not, skip VFP restore
VLDMIA r12!, {s16-s31} ; Yes, restore additional VFP registers
_skip_vfp_restore:
#endif
@@ -224,7 +224,7 @@ _skip_vfp_restore:
BX lr ; Return to thread!
;
; /* The following is the idle wait processing... in this case, no threads are ready for execution and the
-; system will simply be idle until an interrupt occurs that makes a thread ready. Note that interrupts
+; system will simply be idle until an interrupt occurs that makes a thread ready. Note that interrupts
; are disabled to allow use of WFI for waiting for a thread to arrive. */
;
__tx_ts_wait:
@@ -254,13 +254,13 @@ __tx_ts_wait:
CPSIE i ; Enable interrupts
B __tx_ts_wait ; Loop to continue waiting
;
-; /* At this point, we have a new thread ready to go. Clear any newly pended PendSV - since we are
+; /* At this point, we have a new thread ready to go. Clear any newly pended PendSV - since we are
; already in the handler! */
;
__tx_ts_ready:
MOV r7, #0x08000000 ; Build clear PendSV value
MOV r8, #0xE000E000 ; Build base NVIC address
- STR r7, [r8, #0xD04] ; Clear any PendSV
+ STR r7, [r8, #0xD04] ; Clear any PendSV
;
; /* Re-enable interrupts and restore new thread. */
;
@@ -269,14 +269,14 @@ __tx_ts_ready:
;}
;
.type __tx_PendSVHandler,$function
- .size __tx_PendSVHandler,.-__tx_PendSVHandler
+ .size __tx_PendSVHandler,.-__tx_PendSVHandler
#ifdef __VFP__
.globl tx_thread_fpu_enable
tx_thread_fpu_enable:
;
-; /* Automatic VPF logic is supported, this function is present only for
+; /* Automatic VPF logic is supported, this function is present only for
; backward compatibility purposes and therefore simply returns. */
;
BX LR ; Return to caller
@@ -287,12 +287,12 @@ tx_thread_fpu_enable:
.global tx_thread_fpu_disable
tx_thread_fpu_disable:
;
-; /* Automatic VPF logic is supported, this function is present only for
+; /* Automatic VPF logic is supported, this function is present only for
; backward compatibility purposes and therefore simply returns. */
;
BX LR ; Return to caller
.type tx_thread_fpu_disable,$function
- .size tx_thread_fpu_disable,.-tx_thread_fpu_disable
+ .size tx_thread_fpu_disable,.-tx_thread_fpu_disable
#endif
diff --git a/ports/cortex_m4/ghs/src/tx_thread_stack_build.arm b/ports/cortex_m4/ghs/src/tx_thread_stack_build.arm
index 39bdec1fa..9b0646eab 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m4/ghs/src/tx_thread_system_return.arm b/ports/cortex_m4/ghs/src/tx_thread_system_return.arm
index e579fb4dc..8971e4098 100644
--- a/ports/cortex_m4/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_m4/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -80,7 +80,7 @@ _tx_thread_system_return:
CPSIE i ; Enable interrupts
MSR PRIMASK, r1 ; Restore original interrupt posture
_isr_context:
- BX lr ; Return to caller
+ BX lr ; Return to caller
;}
.type _tx_thread_system_return,$function
.size _tx_thread_system_return,.-_tx_thread_system_return
diff --git a/ports/cortex_m4/ghs/src/tx_timer_interrupt.arm b/ports/cortex_m4/ghs/src/tx_timer_interrupt.arm
index 8b67b4d77..97613d88e 100644
--- a/ports/cortex_m4/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_m4/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -83,7 +83,7 @@ _tx_timer_interrupt:
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CBZ r2, __tx_timer_no_time_slice ; Is it non-active?
; Yes, skip time-slice processing
@@ -200,13 +200,13 @@ __tx_timer_dont_activate:
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CBZ r2, __tx_timer_not_ts_expiration ; See if the flag is set
; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
LDR r0, =_tx_thread_preempt_disable ; Build address of preempt disable flag
diff --git a/ports/cortex_m4/gnu/example_build/cortexm4_crt0.S b/ports/cortex_m4/gnu/example_build/cortexm4_crt0.S
index bb530ac5a..070871a3c 100644
--- a/ports/cortex_m4/gnu/example_build/cortexm4_crt0.S
+++ b/ports/cortex_m4/gnu/example_build/cortexm4_crt0.S
@@ -63,7 +63,7 @@ crt0_ctor_loop:
beq crt0_ctor_end
ldr r2, [r0]
add r0, #4
- push {r0-r1}
+ push {r0-r1}
blx r2
pop {r0-r1}
b crt0_ctor_loop
@@ -83,7 +83,7 @@ start:
/* when main returns, loop forever. */
crt0_exit_loop:
b crt0_exit_loop
-
+
/* Startup helper functions. */
@@ -116,4 +116,3 @@ memory_set_done:
.section .stack, "wa", %nobits
.section .stack_process, "wa", %nobits
.section .heap, "wa", %nobits
-
\ No newline at end of file
diff --git a/ports/cortex_m4/gnu/example_build/cortexm4_vectors.S b/ports/cortex_m4/gnu/example_build/cortexm4_vectors.S
index 6ae558e4d..dc8d0aadb 100644
--- a/ports/cortex_m4/gnu/example_build/cortexm4_vectors.S
+++ b/ports/cortex_m4/gnu/example_build/cortexm4_vectors.S
@@ -4,8 +4,8 @@
.global __tx_BadHandler
.global __tx_SVCallHandler
.global __tx_DBGHandler
- .global __tx_PendSVHandler
- .global __tx_SysTickHandler
+ .global __tx_PendSVHandler
+ .global __tx_SysTickHandler
.global __tx_BadHandler
.syntax unified
@@ -15,9 +15,9 @@
.global _vectors
_vectors:
- .word __stack_end__
- .word reset_handler
- .word __tx_NMIHandler
+ .word __stack_end__
+ .word reset_handler
+ .word __tx_NMIHandler
.word __tx_HardfaultHandler
.word __tx_BadHandler
.word __tx_BadHandler
@@ -29,7 +29,7 @@ _vectors:
.word __tx_SVCallHandler //_SVC_Handler - used by Threadx scheduler //
.word __tx_DBGHandler
.word 0 // Reserved
- .word __tx_PendSVHandler
+ .word __tx_PendSVHandler
.word __tx_SysTickHandler // Used by Threadx timer functionality
.word __tx_BadHandler // Populate with user Interrupt handler
.word __tx_BadHandler
diff --git a/ports/cortex_m4/gnu/example_build/sample_threadx.c b/ports/cortex_m4/gnu/example_build/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m4/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_m4/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m4/gnu/example_build/sample_threadx.ld b/ports/cortex_m4/gnu/example_build/sample_threadx.ld
index c65a13464..3f19c29e0 100644
--- a/ports/cortex_m4/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_m4/gnu/example_build/sample_threadx.ld
@@ -10,7 +10,7 @@ __HEAPSIZE__ = 128;
SECTIONS
{
- .vectors :
+ .vectors :
{
KEEP(*(.vectors .vectors.*))
} > FLASH
@@ -45,7 +45,7 @@ SECTIONS
KEEP(*(.eh_frame*))
} > FLASH
- .ARM.extab :
+ .ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
@@ -59,7 +59,7 @@ SECTIONS
__data_load_start__ = ALIGN (4);
- .data : AT (__data_load_start__)
+ .data : AT (__data_load_start__)
{
__data_start__ = .;
@@ -89,7 +89,7 @@ SECTIONS
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
-
+
__data_end__ = .;
} > RAM
@@ -104,7 +104,7 @@ SECTIONS
__bss_end__ = .;
} > RAM
-
+
.heap (COPY):
{
__heap_start__ = ALIGN(4);
diff --git a/ports/cortex_m4/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_m4/gnu/example_build/tx_initialize_low_level.S
index d7e11c06b..4c7a6223f 100644
--- a/ports/cortex_m4/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m4/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -77,16 +77,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-@/* 09-30-2020 William E. Lamie Modified Comment(s), fixed */
-@/* GNU assembly comment, */
-@/* cleaned up whitespace, */
-@/* resulting in version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
diff --git a/ports/cortex_m4/gnu/inc/tx_port.h b/ports/cortex_m4/gnu/inc/tx_port.h
index 3eb8dbffa..7c2b04c58 100644
--- a/ports/cortex_m4/gnu/inc/tx_port.h
+++ b/ports/cortex_m4/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m4/gnu/readme_threadx.txt b/ports/cortex_m4/gnu/readme_threadx.txt
index d9063d65c..58181f851 100644
--- a/ports/cortex_m4/gnu/readme_threadx.txt
+++ b/ports/cortex_m4/gnu/readme_threadx.txt
@@ -5,15 +5,15 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the ARM
-GNU compiler. At this point you may run the build_threadx.bat batch file.
-This will build the ThreadX run-time environment in the "example_build"
-directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the ARM
+GNU compiler. At this point you may run the build_threadx.bat batch file.
+This will build the ThreadX run-time environment in the "example_build"
+directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -22,25 +22,25 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute on Cortex-M evaluation boards
or on a dedicated simulator.
-Building the demonstration is easy, simply execute the build_threadx_sample.bat
+Building the demonstration is easy, simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a binary
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a binary
file that can be downloaded and executed on the a simulator, or downloaded to a board.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
-you can change the build_threadx.bat file to remove the -g option and enable
-all compiler optimizations.
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
+you can change the build_threadx.bat file to remove the -g option and enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m4/gnu/src/tx_misra.S b/ports/cortex_m4/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m4/gnu/src/tx_misra.S
+++ b/ports/cortex_m4/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m4/gnu/src/tx_thread_context_restore.S b/ports/cortex_m4/gnu/src/tx_thread_context_restore.S
index af3749565..85b1ee2a9 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_context_save.S b/ports/cortex_m4/gnu/src/tx_thread_context_save.S
index 0728d86e9..9c0f547a2 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m4/gnu/src/tx_thread_interrupt_control.S
index 38790a855..55791677f 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m4/gnu/src/tx_thread_interrupt_disable.S
index e0ae359ab..56c4c4bc0 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m4/gnu/src/tx_thread_interrupt_restore.S
index 32839c405..9d2ba7b0d 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_schedule.S b/ports/cortex_m4/gnu/src/tx_thread_schedule.S
index 8b283009c..5b6fb5345 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,18 +69,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_stack_build.S b/ports/cortex_m4/gnu/src/tx_thread_stack_build.S
index c62ccf305..0b26d9937 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m4/gnu/src/tx_thread_system_return.S b/ports/cortex_m4/gnu/src/tx_thread_system_return.S
index 234a2121f..8c4a09fd1 100644
--- a/ports/cortex_m4/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m4/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m4/gnu/src/tx_timer_interrupt.S b/ports/cortex_m4/gnu/src/tx_timer_interrupt.S
index 4d0c8003e..6a14a673d 100644
--- a/ports/cortex_m4/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m4/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m4/iar/CMakeLists.txt b/ports/cortex_m4/iar/CMakeLists.txt
index a524d79f0..57be3aebc 100644
--- a/ports/cortex_m4/iar/CMakeLists.txt
+++ b/ports/cortex_m4/iar/CMakeLists.txt
@@ -7,7 +7,7 @@ target_sources(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_disable.S
- ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
diff --git a/ports/cortex_m4/iar/example_build/cstartup_M.s b/ports/cortex_m4/iar/example_build/cstartup_M.s
index 75d9369b3..d1c5aa3ea 100644
--- a/ports/cortex_m4/iar/example_build/cstartup_M.s
+++ b/ports/cortex_m4/iar/example_build/cstartup_M.s
@@ -2,16 +2,16 @@
PUBLIC __vector_table
SECTION .text:CODE:REORDER(1)
-
+
;; Keep vector table even if it's not referenced
REQUIRE __vector_table
-
+
THUMB
-
+
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
-
+
DATA
__vector_table
diff --git a/ports/cortex_m4/iar/example_build/sample_threadx.c b/ports/cortex_m4/iar/example_build/sample_threadx.c
index 60f5a3d38..55b637313 100644
--- a/ports/cortex_m4/iar/example_build/sample_threadx.c
+++ b/ports/cortex_m4/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -69,7 +69,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -101,41 +101,41 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -143,23 +143,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -262,11 +262,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -325,7 +325,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -378,7 +378,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m4/iar/example_build/tx_initialize_low_level.s b/ports/cortex_m4/iar/example_build/tx_initialize_low_level.s
index d3e6d9af5..a84667c38 100644
--- a/ports/cortex_m4/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m4/iar/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -73,12 +73,6 @@ __tx_free_memory_start
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m4/iar/inc/tx_port.h b/ports/cortex_m4/iar/inc/tx_port.h
index d6ac20004..1253befaf 100644
--- a/ports/cortex_m4/iar/inc/tx_port.h
+++ b/ports/cortex_m4/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m4/iar/readme_threadx.txt b/ports/cortex_m4/iar/readme_threadx.txt
index 28b54e035..388c40e6b 100644
--- a/ports/cortex_m4/iar/readme_threadx.txt
+++ b/ports/cortex_m4/iar/readme_threadx.txt
@@ -6,45 +6,45 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
2. Demonstration System
-The ThreadX demonstration is designed to execute under the IAR debugger under
+The ThreadX demonstration is designed to execute under the IAR debugger under
simulation.
Building the demonstration is easy; simply open the threadx.www workspace file,
-make the sample_threadx.ewp project the "active project" in the IAR Embedded
+make the sample_threadx.ewp project the "active project" in the IAR Embedded
Workbench, and select the "Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a
-binary ELF file that can be downloaded and executed on the IAR Windows-based
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a
+binary ELF file that can be downloaded and executed on the IAR Windows-based
Cortex-M simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup_M.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -53,7 +53,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -136,20 +136,20 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
+The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
The application may modify the vector area according to its needs.
@@ -188,14 +188,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m4/iar/src/tx_iar.c b/ports/cortex_m4/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m4/iar/src/tx_iar.c
+++ b/ports/cortex_m4/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m4/iar/src/tx_misra.s b/ports/cortex_m4/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m4/iar/src/tx_misra.s
+++ b/ports/cortex_m4/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m4/iar/src/tx_thread_context_restore.s b/ports/cortex_m4/iar/src/tx_thread_context_restore.s
index ff4f11e0d..d0033b5b5 100644
--- a/ports/cortex_m4/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m4/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_context_save.s b/ports/cortex_m4/iar/src/tx_thread_context_save.s
index c26d32c5b..f1291fec1 100644
--- a/ports/cortex_m4/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m4/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m4/iar/src/tx_thread_interrupt_control.s
index b72bbad32..e0e028c85 100644
--- a/ports/cortex_m4/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m4/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m4/iar/src/tx_thread_interrupt_disable.s
index 4002679f9..00dab2e27 100644
--- a/ports/cortex_m4/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m4/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m4/iar/src/tx_thread_interrupt_restore.s
index b9093f8a3..cf8342281 100644
--- a/ports/cortex_m4/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m4/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_schedule.s b/ports/cortex_m4/iar/src/tx_thread_schedule.s
index 8feaf239d..229fd5df0 100644
--- a/ports/cortex_m4/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m4/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_stack_build.s b/ports/cortex_m4/iar/src/tx_thread_stack_build.s
index 012138481..a80261c23 100644
--- a/ports/cortex_m4/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m4/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m4/iar/src/tx_thread_system_return.s b/ports/cortex_m4/iar/src/tx_thread_system_return.s
index 3260e9170..4f8b9870f 100644
--- a/ports/cortex_m4/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m4/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m4/iar/src/tx_timer_interrupt.s b/ports/cortex_m4/iar/src/tx_timer_interrupt.s
index 72cc4f613..fbf9c2ab3 100644
--- a/ports/cortex_m4/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m4/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m4/keil/example_build/demo_threadx.c b/ports/cortex_m4/keil/example_build/demo_threadx.c
index 96c4eb5a2..34453f42f 100644
--- a/ports/cortex_m4/keil/example_build/demo_threadx.c
+++ b/ports/cortex_m4/keil/example_build/demo_threadx.c
@@ -77,35 +77,35 @@ void tx_application_define(void *first_unused_memory)
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- thread_0_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ thread_0_stack, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- thread_1_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ thread_1_stack, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- thread_2_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ thread_2_stack, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- thread_3_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ thread_3_stack, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- thread_4_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ thread_4_stack, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- thread_5_stack, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ thread_5_stack, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Create the message queue shared by threads 1 and 2. */
@@ -189,11 +189,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -252,7 +252,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
diff --git a/ports/cortex_m4/keil/example_build/tx_initialize_low_level.s b/ports/cortex_m4/keil/example_build/tx_initialize_low_level.s
index e2aec8013..58aee89c0 100644
--- a/ports/cortex_m4/keil/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m4/keil/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -141,12 +141,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m4/keil/inc/tx_port.h b/ports/cortex_m4/keil/inc/tx_port.h
index 331a75a89..f96d819ed 100644
--- a/ports/cortex_m4/keil/inc/tx_port.h
+++ b/ports/cortex_m4/keil/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M4/Keil Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M4/Keil Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m4/keil/readme_threadx.txt b/ports/cortex_m4/keil/readme_threadx.txt
index 128483410..e84f29c98 100644
--- a/ports/cortex_m4/keil/readme_threadx.txt
+++ b/ports/cortex_m4/keil/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M4
+ Microsoft's Azure RTOS ThreadX for Cortex-M4
Thumb & 32-bit Mode
@@ -6,44 +6,44 @@
1. Building the ThreadX run-time Library
-Building the ThreadX library is easy, simply load the project file
-ThreadX_Library.Uv2, which is located inside the "example_build" directory.
+Building the ThreadX library is easy, simply load the project file
+ThreadX_Library.Uv2, which is located inside the "example_build" directory.
Once the ThreadX library files are displayed in the project window,
select the "Build Target" operation and observe the compilation and assembly
-of the ThreadX library. This project build produces the ThreadX library
+of the ThreadX library. This project build produces the ThreadX library
file ThreadX_Library.lib.
2. Demonstration System
The ThreadX demonstration is designed to execute under the Keil debugger or
-Cortex-M4 hardware. This demonstration is slightly smaller than typical ThreadX
+Cortex-M4 hardware. This demonstration is slightly smaller than typical ThreadX
demonstrations, and thus requires less than 7KB of Flash and less than 4KB of RAM.
-Building the demonstration is easy; simply open the ThreadX demonstration
-project file ThreadX_Demo.Uv2, which is located inside the "example_build"
-directory.
+Building the demonstration is easy; simply open the ThreadX demonstration
+project file ThreadX_Demo.Uv2, which is located inside the "example_build"
+directory.
-Once open, select the "Build Target" operation and observe the compilation of
-sample_threadx.c (which is the demonstration application) and linking with
-ThreadX_Library.lib. The resulting file sample_threadx.axf is a binary file that
-can be downloaded and executed on Cortex-M4 hardware.
+Once open, select the "Build Target" operation and observe the compilation of
+sample_threadx.c (which is the demonstration application) and linking with
+ThreadX_Library.lib. The resulting file sample_threadx.axf is a binary file that
+can be downloaded and executed on Cortex-M4 hardware.
3. System Initialization
-The entry point in ThreadX for the Cortex-M4 using Keil tools is at label
-__main. This is defined within the Keil compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M4 using Keil tools is at label
+__main. This is defined within the Keil compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -52,7 +52,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M4 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -135,21 +135,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the ThreadX_Library.Uv2
-project to debugging and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the ThreadX_Library.Uv2
+project to debugging and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -188,8 +188,8 @@ your_assembly_isr
7. FPU Support
-ThreadX for Cortex-M4 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M4 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m4/keil/src/tx_thread_context_restore.s b/ports/cortex_m4/keil/src/tx_thread_context_restore.s
index dddaca7b6..32a10e619 100644
--- a/ports/cortex_m4/keil/src/tx_thread_context_restore.s
+++ b/ports/cortex_m4/keil/src/tx_thread_context_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -62,12 +62,6 @@
;/* */
;/* ISRs Interrupt Service Routines */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_context_save.s b/ports/cortex_m4/keil/src/tx_thread_context_save.s
index 207ab4b17..fd6dfcf60 100644
--- a/ports/cortex_m4/keil/src/tx_thread_context_save.s
+++ b/ports/cortex_m4/keil/src/tx_thread_context_save.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -61,12 +61,6 @@
;/* */
;/* ISRs */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_interrupt_control.s b/ports/cortex_m4/keil/src/tx_thread_interrupt_control.s
index 35367af77..e83f9abba 100644
--- a/ports/cortex_m4/keil/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m4/keil/src/tx_thread_interrupt_control.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_interrupt_disable.s b/ports/cortex_m4/keil/src/tx_thread_interrupt_disable.s
index 825eaf124..c64ce546a 100644
--- a/ports/cortex_m4/keil/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m4/keil/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(UINT new_posture)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_interrupt_restore.s b/ports/cortex_m4/keil/src/tx_thread_interrupt_restore.s
index 4cc243699..53d7ecb72 100644
--- a/ports/cortex_m4/keil/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m4/keil/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -52,12 +52,6 @@
;/* */
;/* Application Code */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_interrupt_restore(UINT new_posture)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_schedule.s b/ports/cortex_m4/keil/src/tx_thread_schedule.s
index d97cf1365..eba721e7f 100644
--- a/ports/cortex_m4/keil/src/tx_thread_schedule.s
+++ b/ports/cortex_m4/keil/src/tx_thread_schedule.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,15 +71,6 @@
;/* _tx_thread_system_return Return to system from thread */
;/* _tx_thread_context_restore Restore thread's context */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* 03-02-2021 Scott Larson Modified comment(s), add */
-;/* low power code, */
-;/* resulting in version 6.1.5 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_stack_build.s b/ports/cortex_m4/keil/src/tx_thread_stack_build.s
index f73651ce3..1f72e52ae 100644
--- a/ports/cortex_m4/keil/src/tx_thread_stack_build.s
+++ b/ports/cortex_m4/keil/src/tx_thread_stack_build.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* _tx_thread_create Create thread service */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
diff --git a/ports/cortex_m4/keil/src/tx_thread_system_return.s b/ports/cortex_m4/keil/src/tx_thread_system_return.s
index 5ee774d9d..dd666162a 100644
--- a/ports/cortex_m4/keil/src/tx_thread_system_return.s
+++ b/ports/cortex_m4/keil/src/tx_thread_system_return.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -54,12 +54,6 @@
;/* */
;/* ThreadX components */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
;{
diff --git a/ports/cortex_m4/keil/src/tx_timer_interrupt.s b/ports/cortex_m4/keil/src/tx_timer_interrupt.s
index 240db972f..7a7b0041b 100644
--- a/ports/cortex_m4/keil/src/tx_timer_interrupt.s
+++ b/ports/cortex_m4/keil/src/tx_timer_interrupt.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -71,12 +71,6 @@
;/* */
;/* interrupt vector */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
;{
diff --git a/ports/cortex_m55/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h b/ports/cortex_m55/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
index 2ec1c863b..a5cd11d9c 100644
--- a/ports/cortex_m55/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
+++ b/ports/cortex_m55/ac6/example_build/RTE/_ThreadX_Library_Project/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'ThreadX_Library'
- * Target: 'ThreadX_Library_Project'
+ * Project: 'ThreadX_Library'
+ * Target: 'ThreadX_Library_Project'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM55.h"
diff --git a/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c b/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c
index ce3ad1611..e54aa490a 100644
--- a/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c
+++ b/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c
@@ -88,8 +88,8 @@ typedef struct /* see "Arm Cortex-Mxx Technical Reference Manual r0p1"
#define ITGU_BASE (0xE001E500UL) /* ITCM Gating Unit */
#define DTGU_BASE (0xE001E600UL) /* DTCM Gating Unit */
-#define ITGU ((TGU_TypeDef *) ITGU_BASE)
-#define DTGU ((TGU_TypeDef *) DTGU_BASE)
+#define ITGU ((TGU_TypeDef *) ITGU_BASE)
+#define DTGU ((TGU_TypeDef *) DTGU_BASE)
/*****************************************************************/
@@ -160,7 +160,7 @@ void SystemInit (void)
/* configure unsecure code area: ITCM 512K 0x00080000 - 0x00100000 */
// blk_cfg = ITGU->CFG & 0xF; /* = 0x7 */
- // blk_size = 1UL << (blk_cfg + 5U); /* = 0x1000 (4K) */
+ // blk_size = 1UL << (blk_cfg + 5U); /* = 0x1000 (4K) */
ITGU->LUT[4] = 0xFFFFFFFF;
ITGU->LUT[5] = 0xFFFFFFFF;
ITGU->LUT[6] = 0xFFFFFFFF;
@@ -168,7 +168,7 @@ void SystemInit (void)
/* configure unsecure data area: DTCM 512K 0x20080000 - 0x20100000 */
// blk_cfg = DTGU->CFG & 0xF; /* = 0x7 */
- // blk_size = 1UL << (blk_cfg + 5U); /* = 0x1000 (4K) */
+ // blk_size = 1UL << (blk_cfg + 5U); /* = 0x1000 (4K) */
DTGU->LUT[4] = 0xFFFFFFFF;
DTGU->LUT[5] = 0xFFFFFFFF;
DTGU->LUT[6] = 0xFFFFFFFF;
diff --git a/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index c7f94da92..e2a867f39 100644
--- a/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m55/ac6/example_build/demo_secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "SSE300MPS3.h"
diff --git a/ports/cortex_m55/ac6/example_build/demo_secure_zone/interface.c b/ports/cortex_m55/ac6/example_build/demo_secure_zone/interface.c
index 4e6e8eeee..af6533c38 100644
--- a/ports/cortex_m55/ac6/example_build/demo_secure_zone/interface.c
+++ b/ports/cortex_m55/ac6/example_build/demo_secure_zone/interface.c
@@ -31,19 +31,19 @@
typedef funcptr funcptr_NS __attribute__((cmse_nonsecure_call));
/* Non-secure callable (entry) function */
-int func1(int x) __attribute__((cmse_nonsecure_entry)) {
- return x+3;
+int func1(int x) __attribute__((cmse_nonsecure_entry)) {
+ return x+3;
}
/* Non-secure callable (entry) function, calling a non-secure callback function */
int func2(funcptr callback, int x) __attribute__((cmse_nonsecure_entry)) {
funcptr_NS callback_NS; // non-secure callback function pointer
int y;
-
+
/* return function pointer with cleared LSB */
callback_NS = (funcptr_NS)cmse_nsfptr_create(callback);
-
+
y = callback_NS (x+1);
-
+
return (y+2);
}
diff --git a/ports/cortex_m55/ac6/example_build/demo_secure_zone/main_s.c b/ports/cortex_m55/ac6/example_build/demo_secure_zone/main_s.c
index 422969de6..92730392d 100644
--- a/ports/cortex_m55/ac6/example_build/demo_secure_zone/main_s.c
+++ b/ports/cortex_m55/ac6/example_build/demo_secure_zone/main_s.c
@@ -24,35 +24,35 @@
* Title: Code template for secure main function
*
*---------------------------------------------------------------------------*/
-
+
#include "region_limits.h"
#include "RTE_Components.h"
#include CMSIS_device_header
-
+
/* TZ_START_NS: Start address of non-secure application */
#ifndef TZ_START_NS
#define TZ_START_NS 0x00080000U
#endif
-
+
/* typedef for non-secure callback functions */
typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
-
+
/* Secure main() */
int main(void) {
funcptr_void NonSecure_ResetHandler;
-
+
/* Add user setup code for secure part here*/
-
+
/* Set non-secure main stack (MSP_NS) */
__TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
-
+
/* Get non-secure reset handler */
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
-
+
/* Start non-secure state software application */
NonSecure_ResetHandler();
-
+
/* Non-secure software does not return, this code is not executed */
while (1) {
__NOP();
diff --git a/ports/cortex_m55/ac6/example_build/demo_secure_zone/tz_context.c b/ports/cortex_m55/ac6/example_build/demo_secure_zone/tz_context.c
index f31528909..ca7f0c56d 100644
--- a/ports/cortex_m55/ac6/example_build/demo_secure_zone/tz_context.c
+++ b/ports/cortex_m55/ac6/example_build/demo_secure_zone/tz_context.c
@@ -24,7 +24,7 @@
* Title: Context Management for ARMv8-M TrustZone - Sample implementation
*
*---------------------------------------------------------------------------*/
-
+
#include "RTE_Components.h"
#include CMSIS_device_header
#include "tz_context.h"
diff --git a/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h b/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
index 3b0b521d1..f6dfdef38 100644
--- a/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
+++ b/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/RTE/_FVP_Simulation_Model/RTE_Components.h
@@ -3,8 +3,8 @@
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
- * Project: 'demo_threadx_non-secure_zone'
- * Target: 'FVP Simulation Model'
+ * Project: 'demo_threadx_non-secure_zone'
+ * Target: 'FVP Simulation Model'
*/
#ifndef RTE_COMPONENTS_H
@@ -12,7 +12,7 @@
/*
- * Define the Device Header File:
+ * Define the Device Header File:
*/
#define CMSIS_device_header "SSE300MPS3.h"
diff --git a/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c b/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
index 7257ac6d4..cea228899 100644
--- a/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
+++ b/ports/cortex_m55/ac6/example_build/demo_threadx_non-secure_zone/demo_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -68,7 +68,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -86,7 +86,7 @@ void tx_application_define(void *first_unused_memory)
CHAR *pointer;
(VOID)first_unused_memory; /* unused parameter. */
-
+
#ifdef TX_ENABLE_EVENT_TRACE
tx_trace_enable(trace_buffer, sizeof(trace_buffer), 32);
#endif
@@ -101,41 +101,41 @@ CHAR *pointer;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -143,23 +143,23 @@ CHAR *pointer;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -188,7 +188,7 @@ CHAR *pointer;
/* Release the block back to the pool. */
tx_block_release(pointer);
-
+
tx_thread_secure_stack_allocate(&thread_0,256);
tx_thread_secure_stack_allocate(&thread_1,256);
tx_thread_secure_stack_allocate(&thread_2,256);
@@ -206,13 +206,13 @@ CHAR *pointer;
void thread_0_entry(ULONG thread_input)
{
UINT status;
-
+
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply sits in while-forever-sleep loop. */
while(1)
{
-
+
/* Increment the thread counter. */
thread_0_counter++;
@@ -235,11 +235,11 @@ void thread_1_entry(ULONG thread_input)
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply sends messages to a queue shared by thread 2. */
while(1)
{
-
+
/* Increment the thread counter. */
thread_1_counter++;
@@ -263,7 +263,7 @@ ULONG received_message;
UINT status;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread retrieves messages placed on the queue by thread 1. */
while(1)
{
@@ -274,11 +274,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -289,7 +289,7 @@ void thread_3_and_4_entry(ULONG thread_input)
{
UINT status;
-
+
/* This function is executed from thread 3 and thread 4. As the loop
below shows, these function compete for ownership of semaphore_0. */
while(1)
@@ -328,7 +328,7 @@ UINT status;
ULONG actual_flags;
(VOID)thread_input; /* unused parameter. */
-
+
/* This thread simply waits for an event in a forever loop. */
while(1)
{
@@ -337,7 +337,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -390,7 +390,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m55/ac6/example_build/tx_initialize_low_level.S b/ports/cortex_m55/ac6/example_build/tx_initialize_low_level.S
index 60c5d4764..fdd8aaed5 100644
--- a/ports/cortex_m55/ac6/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m55/ac6/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -62,12 +63,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m55/ac6/inc/tx_port.h b/ports/cortex_m55/ac6/inc/tx_port.h
index b5fe5f594..9d11a04bf 100644
--- a/ports/cortex_m55/ac6/inc/tx_port.h
+++ b/ports/cortex_m55/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M55 files. It unifies */
/* the Cortex-M55 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M55/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M55/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m55/ac6/inc/tx_secure_interface.h b/ports/cortex_m55/ac6/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m55/ac6/inc/tx_secure_interface.h
+++ b/ports/cortex_m55/ac6/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m55/ac6/readme_threadx.txt b/ports/cortex_m55/ac6/readme_threadx.txt
index fc0aa4043..63e8196e4 100644
--- a/ports/cortex_m55/ac6/readme_threadx.txt
+++ b/ports/cortex_m55/ac6/readme_threadx.txt
@@ -1,46 +1,46 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M55
+ Microsoft's Azure RTOS ThreadX for Cortex-M55
Using the AC6 Tools in Keil uVision
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first open
-the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first open
+the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
into Keil.
2. Building the ThreadX run-time Library
Building the ThreadX library is easy; simply set the ThreadX_Library project
-as active, then then build the library. You should now observe the compilation
+as active, then then build the library. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file ThreadX_Library.lib.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
3. Demonstration System
The ThreadX demonstration is designed to execute under the Keil debugger on the
FVP_MPS2_Cortex-M55_MDK simulator.
-Building the demonstration is easy; simply select the "Batch Build" button.
-You should now observe the compilation and assembly of the ThreadX demonstration of
-both the demo_secure_zone and demo_threadx_non-secure_zone projects.
+Building the demonstration is easy; simply select the "Batch Build" button.
+You should now observe the compilation and assembly of the ThreadX demonstration of
+both the demo_secure_zone and demo_threadx_non-secure_zone projects.
Then click the Start/Stop Debug Session button to start the simulator and begin debugging.
You are now ready to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-M55 using AC6 tools uses the standard AC6
+The entry point in ThreadX for the Cortex-M55 using AC6 tools uses the standard AC6
Cortex-M55 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M55 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,26 +132,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
6. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M55
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-M55 vectors start at the label __Vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
7.2 Managed Interrupts
@@ -177,7 +177,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -187,15 +187,15 @@ your_assembly_isr:
Note: the Cortex-M55 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.s file.
8. FPU Support
-ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m55/ac6/src/tx_initialize_low_level.S b/ports/cortex_m55/ac6/src/tx_initialize_low_level.S
index 55e56af09..d6e397924 100644
--- a/ports/cortex_m55/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_m55/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_misra.S b/ports/cortex_m55/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m55/ac6/src/tx_misra.S
+++ b/ports/cortex_m55/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m55/ac6/src/tx_thread_context_restore.S b/ports/cortex_m55/ac6/src/tx_thread_context_restore.S
index 57f8654a1..5743e7d1a 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_context_save.S b/ports/cortex_m55/ac6/src/tx_thread_context_save.S
index 90cdbace2..4b696f21e 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m55/ac6/src/tx_thread_interrupt_control.S
index 964cb4606..6f34fbfda 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m55/ac6/src/tx_thread_interrupt_disable.S
index 04aeb3004..530e18e4a 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m55/ac6/src/tx_thread_interrupt_restore.S
index 4a85216c5..58ebf0d69 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_schedule.S b/ports/cortex_m55/ac6/src/tx_thread_schedule.S
index 768677236..a1f38fbc4 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,23 +61,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* included tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -354,7 +338,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m55/ac6/src/tx_thread_secure_stack.c b/ports/cortex_m55/ac6/src/tx_thread_secure_stack.c
index 2395e44bb..c01e9fcce 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m55/ac6/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,21 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), and */
-/* changed name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_allocate.S
index e6459612a..bc6a2f5d1 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_free.S b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_free.S
index 961f2047e..5de780d64 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_initialize.S
index db354865a..951ca86fc 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_stack_build.S b/ports/cortex_m55/ac6/src/tx_thread_stack_build.S
index 8938d4294..3d67bdf0f 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m55/ac6/src/tx_thread_system_return.S b/ports/cortex_m55/ac6/src/tx_thread_system_return.S
index 297dc5a13..a27c2756e 100644
--- a/ports/cortex_m55/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m55/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/tx_timer_interrupt.S b/ports/cortex_m55/ac6/src/tx_timer_interrupt.S
index 017c784ba..0f0922b35 100644
--- a/ports/cortex_m55/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m55/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m55/ac6/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m55/ac6/src/txe_thread_secure_stack_allocate.c
index e7d234f65..7a5560ec5 100644
--- a/ports/cortex_m55/ac6/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m55/ac6/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m55/ac6/src/txe_thread_secure_stack_free.c b/ports/cortex_m55/ac6/src/txe_thread_secure_stack_free.c
index 88fa6b479..9572bad80 100644
--- a/ports/cortex_m55/ac6/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m55/ac6/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m55/gnu/inc/tx_port.h b/ports/cortex_m55/gnu/inc/tx_port.h
index 4dc8e10a0..a70426fa6 100644
--- a/ports/cortex_m55/gnu/inc/tx_port.h
+++ b/ports/cortex_m55/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M55 files. It unifies */
/* the Cortex-M55 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M55/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M55/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m55/gnu/inc/tx_secure_interface.h b/ports/cortex_m55/gnu/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m55/gnu/inc/tx_secure_interface.h
+++ b/ports/cortex_m55/gnu/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m55/gnu/readme_threadx.txt b/ports/cortex_m55/gnu/readme_threadx.txt
index 78d640410..3358694de 100644
--- a/ports/cortex_m55/gnu/readme_threadx.txt
+++ b/ports/cortex_m55/gnu/readme_threadx.txt
@@ -1,32 +1,32 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M55
+ Microsoft's Azure RTOS ThreadX for Cortex-M55
Using the GNU Tools
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into a GNU project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
-No demonstration project is provided.
+No demonstration project is provided.
3. System Initialization
-The entry point in ThreadX for the Cortex-M55 using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M55 using gnu tools uses the standard GNU
Cortex-M55 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -35,7 +35,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M55 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -118,26 +118,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M55
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M55 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
@@ -170,15 +170,15 @@ your_assembly_isr:
Note: the Cortex-M55 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m55/gnu/src/tx_initialize_low_level.S b/ports/cortex_m55/gnu/src/tx_initialize_low_level.S
index a782cce55..ee23d9cb3 100644
--- a/ports/cortex_m55/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_m55/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,16 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_misra.S b/ports/cortex_m55/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m55/gnu/src/tx_misra.S
+++ b/ports/cortex_m55/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m55/gnu/src/tx_thread_context_restore.S b/ports/cortex_m55/gnu/src/tx_thread_context_restore.S
index 4a065cbf7..1805d1051 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_context_save.S b/ports/cortex_m55/gnu/src/tx_thread_context_save.S
index d8af04bdf..634440b69 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m55/gnu/src/tx_thread_interrupt_control.S
index 30aa81203..a2db9028c 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m55/gnu/src/tx_thread_interrupt_disable.S
index d6ba1636e..65bb5781d 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m55/gnu/src/tx_thread_interrupt_restore.S
index 95dbff400..37b02ef39 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_schedule.S b/ports/cortex_m55/gnu/src/tx_thread_schedule.S
index 2c9b06088..2bcc96f65 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,24 +57,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -351,7 +334,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m55/gnu/src/tx_thread_secure_stack.c b/ports/cortex_m55/gnu/src/tx_thread_secure_stack.c
index bbc953d73..6abfe7c73 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m55/gnu/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,21 +99,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* disable optimizations, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry, optimize(0)))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_allocate.S
index 8db2c0588..e8b290cf0 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_free.S b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_free.S
index 7a9e9af5d..63bf39608 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_initialize.S
index 57d8fb956..3d38f4515 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_stack_build.S b/ports/cortex_m55/gnu/src/tx_thread_stack_build.S
index 3ac38296a..4cc670028 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m55/gnu/src/tx_thread_system_return.S b/ports/cortex_m55/gnu/src/tx_thread_system_return.S
index a06a31096..0fc717b99 100644
--- a/ports/cortex_m55/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m55/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/tx_timer_interrupt.S b/ports/cortex_m55/gnu/src/tx_timer_interrupt.S
index c2a389aa2..c2cd185a7 100644
--- a/ports/cortex_m55/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m55/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m55/gnu/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m55/gnu/src/txe_thread_secure_stack_allocate.c
index e7d234f65..7a5560ec5 100644
--- a/ports/cortex_m55/gnu/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m55/gnu/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m55/gnu/src/txe_thread_secure_stack_free.c b/ports/cortex_m55/gnu/src/txe_thread_secure_stack_free.c
index 88fa6b479..9572bad80 100644
--- a/ports/cortex_m55/gnu/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m55/gnu/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m55/iar/inc/tx_port.h b/ports/cortex_m55/iar/inc/tx_port.h
index 2d29efe3d..b8a389f55 100644
--- a/ports/cortex_m55/iar/inc/tx_port.h
+++ b/ports/cortex_m55/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M55 files. It unifies */
/* the Cortex-M55 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M55/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M55/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m55/iar/inc/tx_secure_interface.h b/ports/cortex_m55/iar/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m55/iar/inc/tx_secure_interface.h
+++ b/ports/cortex_m55/iar/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m55/iar/readme_threadx.txt b/ports/cortex_m55/iar/readme_threadx.txt
index 1d89e2cb4..dcbee39eb 100644
--- a/ports/cortex_m55/iar/readme_threadx.txt
+++ b/ports/cortex_m55/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M55
+ Microsoft's Azure RTOS ThreadX for Cortex-M55
Using the IAR Tools
@@ -6,33 +6,33 @@
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into an IAR project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
No demonstration is provided because the IAR EWARM 8.50 simulator does
-not simulate the Cortex-M55 correctly.
+not simulate the Cortex-M55 correctly.
3. System Initialization
-The entry point in ThreadX for the Cortex-M55 using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M55 using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -41,7 +41,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M55 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -124,17 +124,17 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M55 vectors start at the label __vector_table and is typically defined in a
+The Cortex-M55 vectors start at the label __vector_table and is typically defined in a
startup.s file (or similar). The application may modify the vector area according to its needs.
@@ -182,14 +182,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m55/iar/src/tx_iar.c b/ports/cortex_m55/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m55/iar/src/tx_iar.c
+++ b/ports/cortex_m55/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m55/iar/src/tx_initialize_low_level.s b/ports/cortex_m55/iar/src/tx_initialize_low_level.s
index 3bb984aa7..312e8267b 100644
--- a/ports/cortex_m55/iar/src/tx_initialize_low_level.s
+++ b/ports/cortex_m55/iar/src/tx_initialize_low_level.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,13 +75,6 @@ __tx_free_memory_start
/* CALLED BY */
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_misra.s b/ports/cortex_m55/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m55/iar/src/tx_misra.s
+++ b/ports/cortex_m55/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m55/iar/src/tx_thread_context_restore.s b/ports/cortex_m55/iar/src/tx_thread_context_restore.s
index 3be0669a6..623329ae7 100644
--- a/ports/cortex_m55/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m55/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_context_save.s b/ports/cortex_m55/iar/src/tx_thread_context_save.s
index fc1acfa4f..5c8d88dec 100644
--- a/ports/cortex_m55/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m55/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m55/iar/src/tx_thread_interrupt_control.s
index c4bae75f6..ccfd72895 100644
--- a/ports/cortex_m55/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m55/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m55/iar/src/tx_thread_interrupt_disable.s
index 59546c0e5..fce50a21c 100644
--- a/ports/cortex_m55/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m55/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m55/iar/src/tx_thread_interrupt_restore.s
index 2efba0293..9ba677196 100644
--- a/ports/cortex_m55/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m55/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_schedule.s b/ports/cortex_m55/iar/src/tx_thread_schedule.s
index d0441084b..822fa83a4 100644
--- a/ports/cortex_m55/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m55/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,23 +74,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -348,7 +332,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m55/iar/src/tx_thread_secure_stack.c b/ports/cortex_m55/iar/src/tx_thread_secure_stack.c
index d7ec07cbe..fd6388f27 100644
--- a/ports/cortex_m55/iar/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m55/iar/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,20 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m55/iar/src/tx_thread_secure_stack_allocate.s b/ports/cortex_m55/iar/src/tx_thread_secure_stack_allocate.s
index 0183e0f82..c3cbf71d7 100644
--- a/ports/cortex_m55/iar/src/tx_thread_secure_stack_allocate.s
+++ b/ports/cortex_m55/iar/src/tx_thread_secure_stack_allocate.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,13 +57,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_secure_stack_free.s b/ports/cortex_m55/iar/src/tx_thread_secure_stack_free.s
index 54c56e7dc..46af894bb 100644
--- a/ports/cortex_m55/iar/src/tx_thread_secure_stack_free.s
+++ b/ports/cortex_m55/iar/src/tx_thread_secure_stack_free.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,13 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_secure_stack_initialize.s b/ports/cortex_m55/iar/src/tx_thread_secure_stack_initialize.s
index b9683f7a9..7e1a4fb19 100644
--- a/ports/cortex_m55/iar/src/tx_thread_secure_stack_initialize.s
+++ b/ports/cortex_m55/iar/src/tx_thread_secure_stack_initialize.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* CALLED BY */
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_stack_build.s b/ports/cortex_m55/iar/src/tx_thread_stack_build.s
index dde61ace3..31dc64695 100644
--- a/ports/cortex_m55/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m55/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m55/iar/src/tx_thread_system_return.s b/ports/cortex_m55/iar/src/tx_thread_system_return.s
index a5e158ab3..2762f49e7 100644
--- a/ports/cortex_m55/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m55/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/tx_timer_interrupt.s b/ports/cortex_m55/iar/src/tx_timer_interrupt.s
index c8cb6eeab..9a25fb244 100644
--- a/ports/cortex_m55/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m55/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,13 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m55/iar/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m55/iar/src/txe_thread_secure_stack_allocate.c
index e7d234f65..7a5560ec5 100644
--- a/ports/cortex_m55/iar/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m55/iar/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m55/iar/src/txe_thread_secure_stack_free.c b/ports/cortex_m55/iar/src/txe_thread_secure_stack_free.c
index 88fa6b479..9572bad80 100644
--- a/ports/cortex_m55/iar/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m55/iar/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m7/ac5/example_build/sample_threadx.c b/ports/cortex_m7/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m7/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_m7/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m7/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_m7/ac5/example_build/tx_initialize_low_level.s
index bd6aa1507..07c27743a 100644
--- a/ports/cortex_m7/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m7/ac5/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -131,12 +131,6 @@ Reset_Handler
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m7/ac5/inc/tx_port.h b/ports/cortex_m7/ac5/inc/tx_port.h
index b0c57c9ca..717bd1271 100644
--- a/ports/cortex_m7/ac5/inc/tx_port.h
+++ b/ports/cortex_m7/ac5/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M7/AC5 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M7/AC5 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m7/ac5/readme_threadx.txt b/ports/cortex_m7/ac5/readme_threadx.txt
index b7b7cee96..e261213ee 100644
--- a/ports/cortex_m7/ac5/readme_threadx.txt
+++ b/ports/cortex_m7/ac5/readme_threadx.txt
@@ -5,14 +5,14 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the AC5
-compiler. At this point you may run the build_threadx.bat batch file. This will
-build the ThreadX run-time environment in the "example_build" directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the AC5
+compiler. At this point you may run the build_threadx.bat batch file. This will
+build the ThreadX run-time environment in the "example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -21,28 +21,28 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute under the ARM DS Cortex-M
simulator.
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM DS Cortex-M
simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-M using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -51,7 +51,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -134,21 +134,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -187,8 +187,8 @@ your_assembly_isr
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m7/ac5/src/tx_thread_context_restore.s b/ports/cortex_m7/ac5/src/tx_thread_context_restore.s
index 5e826e215..0fb0e6c95 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_context_save.s b/ports/cortex_m7/ac5/src/tx_thread_context_save.s
index 0445f04c2..12b27e73e 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,15 +60,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_m7/ac5/src/tx_thread_interrupt_control.s
index 13ad3b6f4..760396b3e 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_m7/ac5/src/tx_thread_interrupt_disable.s
index f32687624..02506666b 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_m7/ac5/src/tx_thread_interrupt_restore.s
index b51e99974..1b099aa20 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,15 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_schedule.s b/ports/cortex_m7/ac5/src/tx_thread_schedule.s
index 1f7d6e135..4ff53e174 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_stack_build.s b/ports/cortex_m7/ac5/src/tx_thread_stack_build.s
index 6f0a830f2..d54a84864 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m7/ac5/src/tx_thread_system_return.s b/ports/cortex_m7/ac5/src/tx_thread_system_return.s
index 98ac59de6..ed7165df5 100644
--- a/ports/cortex_m7/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_m7/ac5/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m7/ac5/src/tx_timer_interrupt.s b/ports/cortex_m7/ac5/src/tx_timer_interrupt.s
index ea6286b8a..f2393840a 100644
--- a/ports/cortex_m7/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_m7/ac5/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m7/ac6/example_build/sample_threadx/.cproject b/ports/cortex_m7/ac6/example_build/sample_threadx/.cproject
index c131df5e9..f33573543 100644
--- a/ports/cortex_m7/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_m7/ac6/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m7/ac6/example_build/sample_threadx/exceptions.c b/ports/cortex_m7/ac6/example_build/sample_threadx/exceptions.c
index 94c87d7a4..f0dd86004 100644
--- a/ports/cortex_m7/ac6/example_build/sample_threadx/exceptions.c
+++ b/ports/cortex_m7/ac6/example_build/sample_threadx/exceptions.c
@@ -1,7 +1,7 @@
/*
** Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
** Use, modification and redistribution of this file is subject to your possession of a
-** valid End User License Agreement for the Arm Product of which these examples are part of
+** valid End User License Agreement for the Arm Product of which these examples are part of
** and your compliance with all applicable terms and conditions of such licence agreement.
*/
diff --git a/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.scat
index 8b4bb5bdb..8be90bfda 100644
--- a/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_m7/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2006-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_m7/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_m7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index ae298a342..11525a956 100644
--- a/ports/cortex_m7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_m7/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@@ -75,12 +75,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
@/* */
@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@{
diff --git a/ports/cortex_m7/ac6/example_build/tx/.cproject b/ports/cortex_m7/ac6/example_build/tx/.cproject
index 7593891a5..5cd65b690 100644
--- a/ports/cortex_m7/ac6/example_build/tx/.cproject
+++ b/ports/cortex_m7/ac6/example_build/tx/.cproject
@@ -1,146 +1,146 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_m7/ac6/inc/tx_port.h b/ports/cortex_m7/ac6/inc/tx_port.h
index f3168bbfc..d3b3bb019 100644
--- a/ports/cortex_m7/ac6/inc/tx_port.h
+++ b/ports/cortex_m7/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M7/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M7/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m7/ac6/readme_threadx.txt b/ports/cortex_m7/ac6/readme_threadx.txt
index d98c90cbe..6447c5177 100644
--- a/ports/cortex_m7/ac6/readme_threadx.txt
+++ b/ports/cortex_m7/ac6/readme_threadx.txt
@@ -5,12 +5,12 @@
1. Building the ThreadX run-time Library
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -20,27 +20,27 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
MPS2_Cortex_Mx Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-mx_tx.launch' file, click
'Debug As', and then click 'cortex-mx_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using AC6 tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m7/ac6/src/tx_misra.S b/ports/cortex_m7/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m7/ac6/src/tx_misra.S
+++ b/ports/cortex_m7/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m7/ac6/src/tx_thread_context_restore.S b/ports/cortex_m7/ac6/src/tx_thread_context_restore.S
index 003bf20d9..9ecbaa0cb 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_context_save.S b/ports/cortex_m7/ac6/src/tx_thread_context_save.S
index a88957ccf..1fab2a9b2 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,14 +61,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m7/ac6/src/tx_thread_interrupt_control.S
index ddd46eb5f..a10c760ae 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m7/ac6/src/tx_thread_interrupt_disable.S
index f58e63d0f..ea8bfd4dc 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m7/ac6/src/tx_thread_interrupt_restore.S
index d195b3ff0..7ea621775 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_schedule.S b/ports/cortex_m7/ac6/src/tx_thread_schedule.S
index d9d202aed..e411198e1 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,16 +71,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_stack_build.S b/ports/cortex_m7/ac6/src/tx_thread_stack_build.S
index fd1aa689a..0fd0dc468 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m7/ac6/src/tx_thread_system_return.S b/ports/cortex_m7/ac6/src/tx_thread_system_return.S
index 57262cebb..831c00e4c 100644
--- a/ports/cortex_m7/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m7/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m7/ac6/src/tx_timer_interrupt.S b/ports/cortex_m7/ac6/src/tx_timer_interrupt.S
index 86f2a7f31..a2f1a4380 100644
--- a/ports/cortex_m7/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m7/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m7/ghs/example_build/sample_threadx.c b/ports/cortex_m7/ghs/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_m7/ghs/example_build/sample_threadx.c
+++ b/ports/cortex_m7/ghs/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m7/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_m7/ghs/example_build/tx_initialize_low_level.arm
index d71a73db5..57c964b34 100644
--- a/ports/cortex_m7/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_m7/ghs/example_build/tx_initialize_low_level.arm
@@ -1,18 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Initialize */
/** */
@@ -24,42 +24,42 @@
.text
.align 4
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_initialize_low_level Cortex-M7/GHS */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level Cortex-M7/GHS */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for any low-level processor */
-/* initialization, including setting up interrupt vectors, setting */
-/* up a periodic timer interrupt source, saving the system stack */
-/* pointer for use in ISR processing later, and finding the first */
-/* available RAM memory address for tx_application_define. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -71,7 +71,7 @@
_tx_initialize_low_level:
/* Disable interrupts. */
-
+
CPSID i ; Disable interrupts
@@ -79,7 +79,7 @@ _tx_initialize_low_level:
/* _tx_thread_system_stack_ptr = (VOID_PTR) (sp); */
LDR r1,=_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- STR sp, [r1] ; Save system stack
+ STR sp, [r1] ; Save system stack
/* Save the first available memory address. */
@@ -95,14 +95,14 @@ _tx_initialize_low_level:
LDR r0, =0xE0001000 ; Build address of DWT register
LDR r1, [r0] ; Pickup the current value
ORR r1, r1, 1 ; Set the CYCCNTENA bit
- STR r1, [r0] ; Enable the cycle count register
+ STR r1, [r0] ; Enable the cycle count register
/* Setup Vector Table Offset Register. */
-
+
MOV r0, 0xE000E000 ; Build address of NVIC registers
LDR r1, =__vectors ; Pickup address of vector table
- STR r1, [r0, 0xD08] ; Set vector table address
+ STR r1, [r0, 0xD08] ; Set vector table address
/* Configure SysTick for 100Hz clock, or 16384 cycles if no reference. */
@@ -134,7 +134,7 @@ _tx_initialize_low_level:
#endif
/* Return to caller. */
-
+
BX lr ; Return to caller
.type _tx_initialize_low_level,$function
@@ -145,7 +145,7 @@ _tx_initialize_low_level:
/* Define shells for each of the interrupt vectors. */
.globl __tx_BadHandler
-__tx_BadHandler:
+__tx_BadHandler:
B __tx_BadHandler
.type __tx_BadHandler,$function
@@ -161,7 +161,7 @@ __tx_IntHandler:
MOV r0, 0 ; Build interrupt code
BL _tx_el_interrupt ; Call interrupt event logging
#endif
-
+
; /* Do interrupt handler work here */
; /* .... */
@@ -199,7 +199,7 @@ __tx_SysTickHandler:
.size __tx_SysTickHandler,.-__tx_SysTickHandler
- .globl __tx_NMIHandler
+ .globl __tx_NMIHandler
__tx_NMIHandler:
B __tx_NMIHandler
@@ -220,7 +220,7 @@ __tx_SVCallHandler:
B __tx_SVCallHandler
.type __tx_SVCallHandler,$function
- .size __tx_SVCallHandler,.-__tx_SVCallHandler
+ .size __tx_SVCallHandler,.-__tx_SVCallHandler
/* Reference build options and version ID to ensure they come in. */
diff --git a/ports/cortex_m7/ghs/inc/tx_el.h b/ports/cortex_m7/ghs/inc/tx_el.h
index 4662f2416..72e5bbe35 100644
--- a/ports/cortex_m7/ghs/inc/tx_el.h
+++ b/ports/cortex_m7/ghs/inc/tx_el.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
@@ -20,27 +21,21 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* COMPONENT DEFINITION RELEASE */
-/* */
-/* tx_el.h PORTABLE C/GHS */
+/**************************************************************************/
+/* */
+/* COMPONENT DEFINITION RELEASE */
+/* */
+/* tx_el.h PORTABLE C/GHS */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file defines the ThreadX event log functions for the GHS MULTI */
-/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
-/* already been included. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This file defines the ThreadX event log functions for the GHS MULTI */
+/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
+/* already been included. */
/* */
/**************************************************************************/
@@ -53,16 +48,16 @@
#define TX_EL_VERSION_ID 2 /* Event log version ID */
#define TX_EL_HEADER_SIZE 24 /* Event log header size */
#define TX_EL_TNIS 16 /* Number of thread names supported */
- /* If the application needs to */
- /* track more thread names, just */
- /* increase this number and re- */
- /* build the ThreadX library. */
+ /* If the application needs to */
+ /* track more thread names, just */
+ /* increase this number and re- */
+ /* build the ThreadX library. */
#define TX_EL_TNI_ENTRY_SIZE 44 /* Thread name entries are 44 bytes */
#define TX_EL_TNI_NAME_SIZE 34 /* Thread name size in TNI */
#define TX_EL_NO_MORE_TNI_ROOM 1 /* Error return from thread register*/
-#define TX_EL_NAME_NOT_FOUND 2 /* Error return from un-register */
+#define TX_EL_NAME_NOT_FOUND 2 /* Error return from un-register */
#define TX_EL_EVENT_SIZE 32 /* Number of bytes in each event */
-#define TX_EL_VALID_ENTRY 1 /* Valid log entry */
+#define TX_EL_VALID_ENTRY 1 /* Valid log entry */
#define TX_EL_INVALID_ENTRY 0 /* Invalid log entry */
@@ -295,7 +290,7 @@
/* Define filter macros that are inserted in-line with the other macros below. */
-#ifdef TX_ENABLE_EVENT_FILTERS
+#ifdef TX_ENABLE_EVENT_FILTERS
#define TX_EL_NO_STATUS_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_STATUS_CHANGE)) {
#define TX_EL_NO_INTERRUPT_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_INTERRUPTS)) {
#define TX_EL_NO_THREAD_EVENTS if (!(_tx_el_event_filter & TX_EL_FILTER_THREAD_CALLS)) {
@@ -430,7 +425,7 @@ extern ULONG _tx_el_time_base_lower;
VOID _tx_el_initialize(VOID);
UINT _tx_el_thread_register(TX_THREAD *thread_ptr);
UINT _tx_el_thread_unregister(TX_THREAD *thread_ptr);
-VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
+VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
ULONG info_3, ULONG info_4);
VOID _tx_el_thread_running(TX_THREAD *thread_ptr);
VOID _tx_el_thread_preempted(TX_THREAD *thread_ptr);
@@ -747,7 +742,7 @@ VOID _tx_el_event_filter_set(UINT filter);
#define TX_EL_THREAD_UNREGISTER(a) \
_tx_el_thread_unregister(a);
#define TX_EL_INITIALIZE _tx_el_initialize();
-#endif
+#endif
#else
#define TX_EL_KERNEL_CALL_EVENT_INSERT_INFO4(a, b, c, d, e)
#define TX_EL_KERNEL_CALL_EVENT_INSERT_INFO3(a, b, c, d)
diff --git a/ports/cortex_m7/ghs/inc/tx_port.h b/ports/cortex_m7/ghs/inc/tx_port.h
index 4f0ae8f12..aabf714ec 100644
--- a/ports/cortex_m7/ghs/inc/tx_port.h
+++ b/ports/cortex_m7/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -61,7 +53,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -112,7 +104,7 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
+#ifndef TX_TIMER_THREAD_PRIORITY
#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
@@ -123,8 +115,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0 /* Enable interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -133,7 +125,7 @@ typedef unsigned short USHORT;
*/
#ifndef TX_TRACE_TIME_SOURCE
-#define TX_TRACE_TIME_SOURCE *((ULONG *) 0xE0001004)
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0xE0001004)
#endif
#ifndef TX_TRACE_TIME_MASK
#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
@@ -145,13 +137,13 @@ typedef unsigned short USHORT;
/* Define the number of ticks per second. This informs the EventAnalyzer what the timestamps
represent. By default, this is set to 1,000,000 i.e., one tick every microsecond. */
-#define TX_EL_TICKS_PER_SECOND 1000000
+#define TX_EL_TICKS_PER_SECOND 1000000
/* Define the method of how to get the upper and lower 32-bits of the time stamp. By default, simply
- simulate the time-stamp source with a counter. */
+ simulate the time-stamp source with a counter. */
-#define read_tbu() _tx_el_time_base_upper
-#define read_tbl() ++_tx_el_time_base_lower
+#define read_tbu() _tx_el_time_base_upper
+#define read_tbl() ++_tx_el_time_base_lower
/* Define the port specific options for the _tx_build_options variable. This variable indicates
@@ -167,7 +159,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -179,19 +171,19 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 VOID * tx_thread_eh_globals; \
int Errno; /* errno. */ \
char * strtok_saved_pos; /* strtok() position. */
#ifndef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
#else
#define TX_THREAD_EXTENSION_3 unsigned long long tx_thread_execution_time_total; \
- unsigned long long tx_thread_execution_time_last_start;
+ unsigned long long tx_thread_execution_time_last_start;
#endif
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -240,7 +232,7 @@ typedef unsigned short USHORT;
extern void __tx_cpp_exception_cleanup(TX_THREAD *thread_ptr); \
__tx_cpp_exception_cleanup(thread_ptr); \
}
-#else
+#else
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) \
{ \
#pragma weak __cpp_exception_cleanup \
@@ -279,7 +271,7 @@ typedef unsigned short USHORT;
/* Define the get system state macro. */
-
+
#ifndef TX_THREAD_GET_SYSTEM_STATE
#define TX_THREAD_GET_SYSTEM_STATE() (_tx_thread_system_state | __MRS(__IPSR))
#endif
@@ -291,32 +283,32 @@ typedef unsigned short USHORT;
zero after initialization for Cortex-M ports. */
#ifndef TX_THREAD_SYSTEM_RETURN_CHECK
-#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
+#define TX_THREAD_SYSTEM_RETURN_CHECK(c) (c) = ((ULONG) _tx_thread_preempt_disable);
#endif
-/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
+/* Define the macro to ensure _tx_thread_preempt_disable is set early in initialization in order to
prevent early scheduling on Cortex-M parts. */
-
+
#define TX_PORT_SPECIFIC_POST_INITIALIZATION _tx_thread_preempt_disable++;
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = __CLZ32(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -386,7 +378,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M7/GHS Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M7/GHS Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_m7/ghs/readme_threadx.txt b/ports/cortex_m7/ghs/readme_threadx.txt
index 22466c4e1..f494875f4 100644
--- a/ports/cortex_m7/ghs/readme_threadx.txt
+++ b/ports/cortex_m7/ghs/readme_threadx.txt
@@ -4,16 +4,16 @@
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,52 +21,52 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-M7 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-M7 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-M7 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -75,7 +75,7 @@ to tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M7 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
@@ -159,21 +159,21 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
7. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
8. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
@@ -185,7 +185,7 @@ the vector area according to its needs.
8.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -194,7 +194,7 @@ Here is the standard template for managed ISRs in ThreadX:
__tx_IntHandler:
PUSH {lr}
BL _tx_thread_context_save
-
+
/* Do interrupt handler work here */
B _tx_thread_context_restore
@@ -204,7 +204,7 @@ __tx_IntHandler:
By default, FPU support is disabled for each thread. If saving the context of the FPU registers
is needed, the ThreadX library should be re-built with TX_ENABLE_FPU_SUPPORT defined. In addition,
-the following API call must be made from the context of the application thread - before
+the following API call must be made from the context of the application thread - before
the FPU usage:
void tx_thread_fpu_enable(void);
@@ -231,7 +231,7 @@ information associated with this specific port of ThreadX:
03-02-2021 The following files were changed/added for version 6.1.5:
tx_thread_schedule.s Added low power feature
-05/19/2020 Initial ThreadX version of Cortex-M7/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-M7/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_m7/ghs/src/tx_el.c b/ports/cortex_m7/ghs/src/tx_el.c
index fd58768f9..b5d3b8b73 100644
--- a/ports/cortex_m7/ghs/src/tx_el.c
+++ b/ports/cortex_m7/ghs/src/tx_el.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
/** */
@@ -49,44 +50,38 @@ extern TX_THREAD *_tx_thread_current_ptr;
UINT _tx_thread_interrupt_control(UINT new_posture);
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_initialize PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_initialize PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function creates the Event Log (in the format dictated by the */
-/* GHS Event Analyzer) and sets up various information for subsequent */
-/* operation. The start and end of the Event Log is determined by the */
-/* .eventlog section in the linker control file. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function creates the Event Log (in the format dictated by the */
+/* GHS Event Analyzer) and sets up various information for subsequent */
+/* operation. The start and end of the Event Log is determined by the */
+/* .eventlog section in the linker control file. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
@@ -150,7 +145,7 @@ UINT i;
/* Setup event_ptr (pointer to oldest event) field to the start
of the event pool. */
- *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
+ *_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_eventlog) + TX_EL_HEADER_SIZE +
(TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = work_ptr + sizeof(ULONG);
@@ -166,17 +161,17 @@ UINT i;
/* Clear the entire TNI array, this is the initial setting. */
end_ptr = work_ptr + (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE);
memset((void *)work_ptr, 0, (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* At this point, we are pointing at the actual Event Entry area. */
-
+
/* Remember the start of the actual event log area. */
_tx_el_event_area_start = work_ptr;
/* Clear the entire Event area. */
end_ptr = work_ptr + event_log_size;
memset((void *)work_ptr, 0, event_log_size);
- work_ptr = end_ptr;
+ work_ptr = end_ptr;
/* Save the end pointer for later use. */
_tx_el_event_area_end = work_ptr;
@@ -201,7 +196,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID to NULL. */
@@ -216,40 +211,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_register PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_register PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function registers a thread in the event log for future */
+/* */
+/* This function registers a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -278,7 +273,7 @@ UINT i;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Check to see if there were no more valid entries. */
if (i >= TX_EL_TNIS)
return(TX_EL_NO_MORE_TNI_ROOM);
@@ -304,7 +299,7 @@ UINT i;
{
/* Yes, insert a NULL into the event log string. */
- *work_ptr = (unsigned char) 0;
+ *work_ptr = (unsigned char) 0;
}
/* Setup the thread ID. */
@@ -321,40 +316,40 @@ UINT i;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_unregister PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_unregister PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function unregisters a thread in the event log for future */
+/* */
+/* This function unregisters a thread in the event log for future */
/* display purposes. */
-/* */
-/* INPUT */
-/* */
-/* thread_ptr Pointer to thread control block */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control block */
+/* */
+/* OUTPUT */
+/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create ThreadX thread create function */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create ThreadX thread create function */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -394,7 +389,7 @@ UINT i, j;
}
else if (*work_ptr == 0)
{
-
+
/* Null terminated, just break the loop. */
break;
}
@@ -426,7 +421,7 @@ UINT i, j;
i++;
entry_ptr = entry_ptr + TX_EL_TNI_ENTRY_SIZE;
}
-
+
/* Determine status to return. */
if (found)
return(TX_SUCCESS);
@@ -435,49 +430,49 @@ UINT i, j;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_user_event_insert PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_user_event_insert PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a user event into the event log. */
-/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* If the event log is full, the oldest event is overwritten. */
+/* */
+/* INPUT */
+/* */
/* sub_type Event subtype for kernel call */
/* info_1 First information field */
/* info_2 Second information field */
/* info_3 Third information field */
/* info_4 Fourth information field */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* */
/**************************************************************************/
-VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
+VOID _tx_el_user_event_insert(UINT sub_type, ULONG info_1, ULONG info_2,
ULONG info_3, ULONG info_4)
{
@@ -545,7 +540,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -558,41 +553,41 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_running PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_running PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread change event into the event */
/* log, which indicates that a context switch is taking place. */
/* If the event log is full, the oldest event is overwritten. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_schedule ThreadX scheduler */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_schedule ThreadX scheduler */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -604,7 +599,7 @@ VOID _tx_el_thread_running(TX_THREAD *thread_ptr)
UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -646,7 +641,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -658,43 +653,43 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_thread_preempted PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_thread_preempted PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts a thread preempted event into the event */
/* log, which indicates that an interrupt occurred that made a higher */
/* priority thread ready for execution. In this case, the previously */
/* executing thread has an event entered to indicate it is no longer */
/* running. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread being */
/* scheduled */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_context_restore ThreadX context restore */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_context_restore ThreadX context restore */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -707,7 +702,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_STATUS_EVENTS
+ TX_EL_NO_STATUS_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -749,7 +744,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -761,40 +756,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt event into the log, which */
/* indicates the start of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -807,7 +802,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -853,7 +848,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -865,40 +860,40 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_end PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_end PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function inserts an interrupt end event into the log, which */
/* indicates the end of interrupt processing for the specific */
-/* */
-/* INPUT */
-/* */
+/* */
+/* INPUT */
+/* */
/* interrupt_number Interrupt number supplied by */
/* ISR */
/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* ISR processing */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISR processing */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -911,7 +906,7 @@ UINT upper_tb;
UCHAR *entry_ptr;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
/* Increment total event counter. */
_tx_el_total_events++;
@@ -957,7 +952,7 @@ UCHAR *entry_ptr;
if (entry_ptr >= _tx_el_event_area_end)
{
- /* Yes, we have wrapped around to the end of the event area.
+ /* Yes, we have wrapped around to the end of the event area.
Start back at the top! */
entry_ptr = _tx_el_event_area_start;
}
@@ -969,39 +964,39 @@ UCHAR *entry_ptr;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_interrupt_control PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_interrupt_control PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function remaps the tx_interrupt_control service call so that */
-/* it can be tracked in the event log. */
-/* */
-/* INPUT */
-/* */
+/* */
+/* This function remaps the tx_interrupt_control service call so that */
+/* it can be tracked in the event log. */
+/* */
+/* INPUT */
+/* */
/* new_posture New interrupt posture */
/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt posture */
-/* */
-/* CALLS */
-/* */
-/* _tx_thread_interrupt_control Interrupt control service */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX services */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt posture */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_interrupt_control Interrupt control service */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX services */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1014,7 +1009,7 @@ TX_INTERRUPT_SAVE_AREA
UINT old_posture;
- TX_EL_NO_INTERRUPT_EVENTS
+ TX_EL_NO_INTERRUPT_EVENTS
TX_DISABLE
TX_EL_KERNEL_CALL_EVENT_INSERT_INFO2(TX_EL_INTERRUPT_CONTROL, _tx_thread_current_ptr, new_posture)
@@ -1027,38 +1022,38 @@ UINT old_posture;
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_on PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_on PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function disables all event filters. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function disables all event filters. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1072,39 +1067,39 @@ VOID _tx_el_event_log_on(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_off PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_off PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function sets all event filters, thereby turning event */
-/* logging off. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* This function sets all event filters, thereby turning event */
+/* logging off. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
@@ -1118,38 +1113,38 @@ VOID _tx_el_event_log_off(void)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_el_event_log_set PORTABLE C */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_el_event_log_set PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function sets the events filters specified by the user. */
-/* */
-/* INPUT */
-/* */
-/* filter Events to filter */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* None */
-/* */
-/* CALLED BY */
-/* */
-/* Application code */
-/* */
-/* RELEASE HISTORY */
-/* */
+/* */
+/* INPUT */
+/* */
+/* filter Events to filter */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application code */
+/* */
+/* RELEASE HISTORY */
+/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
diff --git a/ports/cortex_m7/ghs/src/tx_ghs.c b/ports/cortex_m7/ghs/src/tx_ghs.c
index 0be9d715c..30b8054e4 100644
--- a/ports/cortex_m7/ghs/src/tx_ghs.c
+++ b/ports/cortex_m7/ghs/src/tx_ghs.c
@@ -55,7 +55,7 @@ extern TX_THREAD *_tx_thread_current_ptr;
If you customize the System Library, you should remove ind_thrd.c
from the libsys.gpj subproject.
-
+
*/
/* Provide global __eh_globals value to support C++ exception handling
diff --git a/ports/cortex_m7/ghs/src/tx_thread_context_restore.arm b/ports/cortex_m7/ghs/src/tx_thread_context_restore.arm
index 556e49409..136d2666d 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m7/ghs/src/tx_thread_context_save.arm b/ports/cortex_m7/ghs/src/tx_thread_context_save.arm
index edf1ab034..275059e2e 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m7/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_m7/ghs/src/tx_thread_interrupt_control.arm
index 3d514ab46..2775e088d 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m7/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_m7/ghs/src/tx_thread_interrupt_disable.arm
index 1d014f8a9..fef336a39 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -81,4 +81,4 @@ _tx_thread_interrupt_disable:
;
;}
.type _tx_thread_interrupt_disable,$function
- .size _tx_thread_interrupt_disable,.-_tx_thread_interrupt_disable
+ .size _tx_thread_interrupt_disable,.-_tx_thread_interrupt_disable
diff --git a/ports/cortex_m7/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_m7/ghs/src/tx_thread_interrupt_restore.arm
index 55a5289a5..1541dd37f 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -72,4 +72,4 @@ _tx_thread_interrupt_restore:
;
;}
.type _tx_thread_interrupt_restore,$function
- .size _tx_thread_interrupt_restore,.-_tx_thread_interrupt_restore
+ .size _tx_thread_interrupt_restore,.-_tx_thread_interrupt_restore
diff --git a/ports/cortex_m7/ghs/src/tx_thread_schedule.arm b/ports/cortex_m7/ghs/src/tx_thread_schedule.arm
index 3b8aa4054..6796f7b47 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -85,7 +85,7 @@ _tx_thread_schedule:
;
#ifdef __VFP__
MRS r0, CONTROL ; Pickup current CONTROL register
- BIC r0, r0, #4 ; Clear the FPCA bit
+ BIC r0, r0, #4 ; Clear the FPCA bit
MSR CONTROL, r0 ; Setup new CONTROL register
#endif
;
@@ -118,8 +118,8 @@ PendSV_Handler:
__tx_PendSVHandler:
;
; /* Get current thread value and new thread pointer. */
-;
-__tx_ts_handler:
+;
+__tx_ts_handler:
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
@@ -137,7 +137,7 @@ __tx_ts_handler:
LDR r1, [r0] ; Pickup current thread pointer
;
; /* Determine if there is a current thread to finish preserving. */
-;
+;
CBZ r1, __tx_ts_new ; If NULL, skip preservation
;
; /* Recover PSP and preserve current thread context. */
@@ -212,7 +212,7 @@ __tx_ts_restore:
LDR.W LR, [r12], #4 ; Pickup LR
#ifdef __VFP__
TST LR, #0x10 ; Determine if the VFP extended frame is present
- BNE _skip_vfp_restore ; If not, skip VFP restore
+ BNE _skip_vfp_restore ; If not, skip VFP restore
VLDMIA r12!, {s16-s31} ; Yes, restore additional VFP registers
_skip_vfp_restore:
#endif
@@ -224,7 +224,7 @@ _skip_vfp_restore:
BX lr ; Return to thread!
;
; /* The following is the idle wait processing... in this case, no threads are ready for execution and the
-; system will simply be idle until an interrupt occurs that makes a thread ready. Note that interrupts
+; system will simply be idle until an interrupt occurs that makes a thread ready. Note that interrupts
; are disabled to allow use of WFI for waiting for a thread to arrive. */
;
__tx_ts_wait:
@@ -254,13 +254,13 @@ __tx_ts_wait:
CPSIE i ; Enable interrupts
B __tx_ts_wait ; Loop to continue waiting
;
-; /* At this point, we have a new thread ready to go. Clear any newly pended PendSV - since we are
+; /* At this point, we have a new thread ready to go. Clear any newly pended PendSV - since we are
; already in the handler! */
;
__tx_ts_ready:
MOV r7, #0x08000000 ; Build clear PendSV value
MOV r8, #0xE000E000 ; Build base NVIC address
- STR r7, [r8, #0xD04] ; Clear any PendSV
+ STR r7, [r8, #0xD04] ; Clear any PendSV
;
; /* Re-enable interrupts and restore new thread. */
;
@@ -269,14 +269,14 @@ __tx_ts_ready:
;}
;
.type __tx_PendSVHandler,$function
- .size __tx_PendSVHandler,.-__tx_PendSVHandler
+ .size __tx_PendSVHandler,.-__tx_PendSVHandler
#ifdef __VFP__
.globl tx_thread_fpu_enable
tx_thread_fpu_enable:
;
-; /* Automatic VPF logic is supported, this function is present only for
+; /* Automatic VPF logic is supported, this function is present only for
; backward compatibility purposes and therefore simply returns. */
;
BX LR ; Return to caller
@@ -287,12 +287,12 @@ tx_thread_fpu_enable:
.global tx_thread_fpu_disable
tx_thread_fpu_disable:
;
-; /* Automatic VPF logic is supported, this function is present only for
+; /* Automatic VPF logic is supported, this function is present only for
; backward compatibility purposes and therefore simply returns. */
;
BX LR ; Return to caller
.type tx_thread_fpu_disable,$function
- .size tx_thread_fpu_disable,.-tx_thread_fpu_disable
+ .size tx_thread_fpu_disable,.-tx_thread_fpu_disable
#endif
diff --git a/ports/cortex_m7/ghs/src/tx_thread_stack_build.arm b/ports/cortex_m7/ghs/src/tx_thread_stack_build.arm
index e2f0182e3..45c950c8f 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
diff --git a/ports/cortex_m7/ghs/src/tx_thread_system_return.arm b/ports/cortex_m7/ghs/src/tx_thread_system_return.arm
index da4ae3cb1..b2c3dd25a 100644
--- a/ports/cortex_m7/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_m7/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -80,7 +80,7 @@ _tx_thread_system_return:
CPSIE i ; Enable interrupts
MSR PRIMASK, r1 ; Restore original interrupt posture
_isr_context:
- BX lr ; Return to caller
+ BX lr ; Return to caller
;}
.type _tx_thread_system_return,$function
.size _tx_thread_system_return,.-_tx_thread_system_return
diff --git a/ports/cortex_m7/ghs/src/tx_timer_interrupt.arm b/ports/cortex_m7/ghs/src/tx_timer_interrupt.arm
index 6a9531fdd..451e13ddc 100644
--- a/ports/cortex_m7/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_m7/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -83,7 +83,7 @@ _tx_timer_interrupt:
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CBZ r2, __tx_timer_no_time_slice ; Is it non-active?
; Yes, skip time-slice processing
@@ -200,13 +200,13 @@ __tx_timer_dont_activate:
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CBZ r2, __tx_timer_not_ts_expiration ; See if the flag is set
; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
LDR r0, =_tx_thread_preempt_disable ; Build address of preempt disable flag
diff --git a/ports/cortex_m7/gnu/example_build/cortexm7_crt0.S b/ports/cortex_m7/gnu/example_build/cortexm7_crt0.S
index 4228fc110..e06430d7f 100644
--- a/ports/cortex_m7/gnu/example_build/cortexm7_crt0.S
+++ b/ports/cortex_m7/gnu/example_build/cortexm7_crt0.S
@@ -39,7 +39,7 @@ crt0_ctor_loop:
beq crt0_ctor_end
ldr r2, [r0]
add r0, #4
- push {r0-r1}
+ push {r0-r1}
blx r2
pop {r0-r1}
b crt0_ctor_loop
@@ -88,4 +88,3 @@ memory_set_done:
.section .stack, "wa", %nobits
.section .stack_process, "wa", %nobits
.section .heap, "wa", %nobits
-
\ No newline at end of file
diff --git a/ports/cortex_m7/gnu/example_build/cortexm7_vectors.S b/ports/cortex_m7/gnu/example_build/cortexm7_vectors.S
index 6ae558e4d..dc8d0aadb 100644
--- a/ports/cortex_m7/gnu/example_build/cortexm7_vectors.S
+++ b/ports/cortex_m7/gnu/example_build/cortexm7_vectors.S
@@ -4,8 +4,8 @@
.global __tx_BadHandler
.global __tx_SVCallHandler
.global __tx_DBGHandler
- .global __tx_PendSVHandler
- .global __tx_SysTickHandler
+ .global __tx_PendSVHandler
+ .global __tx_SysTickHandler
.global __tx_BadHandler
.syntax unified
@@ -15,9 +15,9 @@
.global _vectors
_vectors:
- .word __stack_end__
- .word reset_handler
- .word __tx_NMIHandler
+ .word __stack_end__
+ .word reset_handler
+ .word __tx_NMIHandler
.word __tx_HardfaultHandler
.word __tx_BadHandler
.word __tx_BadHandler
@@ -29,7 +29,7 @@ _vectors:
.word __tx_SVCallHandler //_SVC_Handler - used by Threadx scheduler //
.word __tx_DBGHandler
.word 0 // Reserved
- .word __tx_PendSVHandler
+ .word __tx_PendSVHandler
.word __tx_SysTickHandler // Used by Threadx timer functionality
.word __tx_BadHandler // Populate with user Interrupt handler
.word __tx_BadHandler
diff --git a/ports/cortex_m7/gnu/example_build/sample_threadx.c b/ports/cortex_m7/gnu/example_build/sample_threadx.c
index 597f373ca..13ffadbaa 100644
--- a/ports/cortex_m7/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_m7/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -81,42 +81,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -124,23 +124,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -243,11 +243,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -306,7 +306,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -359,7 +359,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m7/gnu/example_build/sample_threadx.ld b/ports/cortex_m7/gnu/example_build/sample_threadx.ld
index c65a13464..3f19c29e0 100644
--- a/ports/cortex_m7/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_m7/gnu/example_build/sample_threadx.ld
@@ -10,7 +10,7 @@ __HEAPSIZE__ = 128;
SECTIONS
{
- .vectors :
+ .vectors :
{
KEEP(*(.vectors .vectors.*))
} > FLASH
@@ -45,7 +45,7 @@ SECTIONS
KEEP(*(.eh_frame*))
} > FLASH
- .ARM.extab :
+ .ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
@@ -59,7 +59,7 @@ SECTIONS
__data_load_start__ = ALIGN (4);
- .data : AT (__data_load_start__)
+ .data : AT (__data_load_start__)
{
__data_start__ = .;
@@ -89,7 +89,7 @@ SECTIONS
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
-
+
__data_end__ = .;
} > RAM
@@ -104,7 +104,7 @@ SECTIONS
__bss_end__ = .;
} > RAM
-
+
.heap (COPY):
{
__heap_start__ = ALIGN(4);
diff --git a/ports/cortex_m7/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_m7/gnu/example_build/tx_initialize_low_level.S
index 5aaaaad37..e146e47fc 100644
--- a/ports/cortex_m7/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_m7/gnu/example_build/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -72,16 +73,6 @@ SYSTICK_CYCLES = ((SYSTEM_CLOCK / 100) -1)
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 05-19-2020 William E. Lamie Initial Version 6.0 */
-/* 09-30-2020 William E. Lamie Modified Comment(s), fixed */
-/* GNU assembly comment, clean */
-/* up whitespace, resulting */
-/* in version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m7/gnu/inc/tx_port.h b/ports/cortex_m7/gnu/inc/tx_port.h
index 55157defe..48a34cfa4 100644
--- a/ports/cortex_m7/gnu/inc/tx_port.h
+++ b/ports/cortex_m7/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M7/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M7/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m7/gnu/readme_threadx.txt b/ports/cortex_m7/gnu/readme_threadx.txt
index d9063d65c..58181f851 100644
--- a/ports/cortex_m7/gnu/readme_threadx.txt
+++ b/ports/cortex_m7/gnu/readme_threadx.txt
@@ -5,15 +5,15 @@
1. Building the ThreadX run-time Library
-Navigate to the "example_build" directory. Ensure that
-you have setup your path and other environment variables necessary for the ARM
-GNU compiler. At this point you may run the build_threadx.bat batch file.
-This will build the ThreadX run-time environment in the "example_build"
-directory.
-
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+Navigate to the "example_build" directory. Ensure that
+you have setup your path and other environment variables necessary for the ARM
+GNU compiler. At this point you may run the build_threadx.bat batch file.
+This will build the ThreadX run-time environment in the "example_build"
+directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
@@ -22,25 +22,25 @@ application in order to use ThreadX.
The ThreadX demonstration is designed to execute on Cortex-M evaluation boards
or on a dedicated simulator.
-Building the demonstration is easy, simply execute the build_threadx_sample.bat
+Building the demonstration is easy, simply execute the build_threadx_sample.bat
batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a binary
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a binary
file that can be downloaded and executed on the a simulator, or downloaded to a board.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M using gnu tools uses the standard GNU
Cortex-M reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,34 +132,34 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler optimizations.
-This makes it easy to debug because you can trace or set breakpoints inside of
-ThreadX itself. Of course, this costs some performance. To make it run faster,
-you can change the build_threadx.bat file to remove the -g option and enable
-all compiler optimizations.
+The distribution version of ThreadX is built without any compiler optimizations.
+This makes it easy to debug because you can trace or set breakpoints inside of
+ThreadX itself. Of course, this costs some performance. To make it run faster,
+you can change the build_threadx.bat file to remove the -g option and enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
-A ThreadX managed interrupt is defined below. By following these conventions, the
+A ThreadX managed interrupt is defined below. By following these conventions, the
application ISR is then allowed access to various ThreadX services from the ISR.
Here is the standard template for managed ISRs in ThreadX:
@@ -181,15 +181,15 @@ __tx_IntHandler:
Note: the Cortex-M requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m7/gnu/src/tx_misra.S b/ports/cortex_m7/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m7/gnu/src/tx_misra.S
+++ b/ports/cortex_m7/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m7/gnu/src/tx_thread_context_restore.S b/ports/cortex_m7/gnu/src/tx_thread_context_restore.S
index 57b18cf69..638959287 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,14 +62,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_context_save.S b/ports/cortex_m7/gnu/src/tx_thread_context_save.S
index d118c5bd0..96df9ac54 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.S
index 62301c14a..5778d8d40 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.S
index f74a37488..19f6f8547 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.S
index f4be7ebad..25f1aac3f 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_schedule.S b/ports/cortex_m7/gnu/src/tx_thread_schedule.S
index e27434011..6700fd976 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -68,18 +69,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_stack_build.S b/ports/cortex_m7/gnu/src/tx_thread_stack_build.S
index 0c72a44f7..d0e2eaf3d 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m7/gnu/src/tx_thread_system_return.S b/ports/cortex_m7/gnu/src/tx_thread_system_return.S
index 4987b0470..ce5a3f46f 100644
--- a/ports/cortex_m7/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m7/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -59,14 +60,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m7/gnu/src/tx_timer_interrupt.S b/ports/cortex_m7/gnu/src/tx_timer_interrupt.S
index d9477dea1..6cc18b25f 100644
--- a/ports/cortex_m7/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m7/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -70,17 +71,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m7/iar/CMakeLists.txt b/ports/cortex_m7/iar/CMakeLists.txt
index a524d79f0..57be3aebc 100644
--- a/ports/cortex_m7/iar/CMakeLists.txt
+++ b/ports/cortex_m7/iar/CMakeLists.txt
@@ -7,7 +7,7 @@ target_sources(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_disable.S
- ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_restore.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
diff --git a/ports/cortex_m7/iar/example_build/cstartup_M.s b/ports/cortex_m7/iar/example_build/cstartup_M.s
index 75d9369b3..d1c5aa3ea 100644
--- a/ports/cortex_m7/iar/example_build/cstartup_M.s
+++ b/ports/cortex_m7/iar/example_build/cstartup_M.s
@@ -2,16 +2,16 @@
PUBLIC __vector_table
SECTION .text:CODE:REORDER(1)
-
+
;; Keep vector table even if it's not referenced
REQUIRE __vector_table
-
+
THUMB
-
+
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
-
+
DATA
__vector_table
diff --git a/ports/cortex_m7/iar/example_build/sample_threadx.c b/ports/cortex_m7/iar/example_build/sample_threadx.c
index 9a626828e..f1f4cb876 100644
--- a/ports/cortex_m7/iar/example_build/sample_threadx.c
+++ b/ports/cortex_m7/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -65,7 +65,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Please refer to Chapter 6 of the ThreadX User Guide for a complete
description of this demonstration. */
@@ -93,41 +93,41 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -135,23 +135,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -254,11 +254,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -317,7 +317,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -370,7 +370,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_m7/iar/example_build/tx_initialize_low_level.s b/ports/cortex_m7/iar/example_build/tx_initialize_low_level.s
index b725ef997..76d065cff 100644
--- a/ports/cortex_m7/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_m7/iar/example_build/tx_initialize_low_level.s
@@ -1,10 +1,10 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
@@ -73,12 +73,6 @@ __tx_free_memory_start
;/* */
;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
;{
diff --git a/ports/cortex_m7/iar/inc/tx_port.h b/ports/cortex_m7/iar/inc/tx_port.h
index a2d0526fc..63d821bfc 100644
--- a/ports/cortex_m7/iar/inc/tx_port.h
+++ b/ports/cortex_m7/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,23 +46,6 @@
/* This file replaces the previous Cortex-M3/M4/M7 files. It unifies */
/* the ARMv7-M architecture and compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comments, updated */
-/* typedef to fix misra */
-/* violation, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -371,7 +355,7 @@ void _tx_vfp_access(void);
/* A thread can be terminated by another thread, so we first check if it's self-terminating and not in an ISR.
If so, deactivate the FPU via CONTROL.FPCA. Otherwise we are in an interrupt or another thread is terminating
- this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
+ this one, so if the FPCCR.LSPACT bit is set, we need to save the CONTROL.FPCA state, touch the FPU to flush
the lazy FPU save, then restore the CONTROL.FPCA state. */
#ifndef TX_MISRA_ENABLE
@@ -530,7 +514,7 @@ ULONG _tx_misra_ipsr_get(VOID);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) (b) = (UINT) __clz(__rbit((m)));
#elif defined(__GNUC__) /* GCC and AC6 Compiler */
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) __asm__ volatile (" RBIT %0,%1 ": "=r" (m) : "r" (m) ); \
- __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
+ __asm__ volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) );
#endif
@@ -715,7 +699,7 @@ void tx_thread_fpu_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M7/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M7/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m7/iar/readme_threadx.txt b/ports/cortex_m7/iar/readme_threadx.txt
index 28b54e035..388c40e6b 100644
--- a/ports/cortex_m7/iar/readme_threadx.txt
+++ b/ports/cortex_m7/iar/readme_threadx.txt
@@ -6,45 +6,45 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
2. Demonstration System
-The ThreadX demonstration is designed to execute under the IAR debugger under
+The ThreadX demonstration is designed to execute under the IAR debugger under
simulation.
Building the demonstration is easy; simply open the threadx.www workspace file,
-make the sample_threadx.ewp project the "active project" in the IAR Embedded
+make the sample_threadx.ewp project the "active project" in the IAR Embedded
Workbench, and select the "Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.out is a
-binary ELF file that can be downloaded and executed on the IAR Windows-based
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a
+binary ELF file that can be downloaded and executed on the IAR Windows-based
Cortex-M simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-M using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup_M.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -53,7 +53,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -136,20 +136,20 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
+The Cortex-M vectors start at the label __vector_table and is defined in cstartup_M.s.
The application may modify the vector area according to its needs.
@@ -188,14 +188,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context - no additional setup by the application.
diff --git a/ports/cortex_m7/iar/src/tx_iar.c b/ports/cortex_m7/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m7/iar/src/tx_iar.c
+++ b/ports/cortex_m7/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m7/iar/src/tx_misra.s b/ports/cortex_m7/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m7/iar/src/tx_misra.s
+++ b/ports/cortex_m7/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m7/iar/src/tx_thread_context_restore.s b/ports/cortex_m7/iar/src/tx_thread_context_restore.s
index 52c333282..ccc96ede6 100644
--- a/ports/cortex_m7/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m7/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_context_save.s b/ports/cortex_m7/iar/src/tx_thread_context_save.s
index f3bca66a4..dcf510a68 100644
--- a/ports/cortex_m7/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m7/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,15 +57,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m7/iar/src/tx_thread_interrupt_control.s
index 8950acd55..f28d5bdec 100644
--- a/ports/cortex_m7/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m7/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m7/iar/src/tx_thread_interrupt_disable.s
index 76e09a1c2..36aaaf0a5 100644
--- a/ports/cortex_m7/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m7/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m7/iar/src/tx_thread_interrupt_restore.s
index 57102c6d0..55aa1d621 100644
--- a/ports/cortex_m7/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m7/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,15 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_schedule.s b/ports/cortex_m7/iar/src/tx_thread_schedule.s
index 7125056b5..58279c1ad 100644
--- a/ports/cortex_m7/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m7/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -67,17 +68,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_stack_build.s b/ports/cortex_m7/iar/src/tx_thread_stack_build.s
index 04b1479c0..2f7ac3ab1 100644
--- a/ports/cortex_m7/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m7/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m7/iar/src/tx_thread_system_return.s b/ports/cortex_m7/iar/src/tx_thread_system_return.s
index 51c854916..0cef80c6f 100644
--- a/ports/cortex_m7/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m7/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,15 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m7/iar/src/tx_timer_interrupt.s b/ports/cortex_m7/iar/src/tx_timer_interrupt.s
index 1da9431ec..775c0a45a 100644
--- a/ports/cortex_m7/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m7/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,18 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 01-31-2022 Scott Larson Modified comment(s), added */
-/* TX_NO_TIMER support, */
-/* resulting in version 6.1.10 */
-/* 10-31-2023 Tiejun Zhou Included tx_user.h, */
-/* resulting in version 6.3.0 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m85/ac6/inc/tx_port.h b/ports/cortex_m85/ac6/inc/tx_port.h
index 2eb69f384..7e119fee1 100644
--- a/ports/cortex_m85/ac6/inc/tx_port.h
+++ b/ports/cortex_m85/ac6/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M85 files. It unifies */
/* the Cortex-M85 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M85/AC6 Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M85/AC6 Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m85/ac6/inc/tx_secure_interface.h b/ports/cortex_m85/ac6/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m85/ac6/inc/tx_secure_interface.h
+++ b/ports/cortex_m85/ac6/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m85/ac6/readme_threadx.txt b/ports/cortex_m85/ac6/readme_threadx.txt
index dda0c1c44..abe80bf85 100644
--- a/ports/cortex_m85/ac6/readme_threadx.txt
+++ b/ports/cortex_m85/ac6/readme_threadx.txt
@@ -1,46 +1,46 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M85
+ Microsoft's Azure RTOS ThreadX for Cortex-M85
Using the AC6 Tools in Keil uVision
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first open
-the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first open
+the AzureRTOS.uvmpw workspace (located in the "example_build" directory)
into Keil.
2. Building the ThreadX run-time Library
Building the ThreadX library is easy; simply set the ThreadX_Library project
-as active, then then build the library. You should now observe the compilation
+as active, then then build the library. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file ThreadX_Library.lib.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
3. Demonstration System
The ThreadX demonstration is designed to execute under the Keil debugger on the
FVP_MPS2_Cortex-M85_MDK simulator.
-Building the demonstration is easy; simply select the "Batch Build" button.
-You should now observe the compilation and assembly of the ThreadX demonstration of
-both the demo_secure_zone and demo_threadx_non-secure_zone projects.
+Building the demonstration is easy; simply select the "Batch Build" button.
+You should now observe the compilation and assembly of the ThreadX demonstration of
+both the demo_secure_zone and demo_threadx_non-secure_zone projects.
Then click the Start/Stop Debug Session button to start the simulator and begin debugging.
You are now ready to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-M85 using AC6 tools uses the standard AC6
+The entry point in ThreadX for the Cortex-M85 using AC6 tools uses the standard AC6
Cortex-M85 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -49,7 +49,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M85 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -132,26 +132,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
6. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M85
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-M85 vectors start at the label __Vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
7.2 Managed Interrupts
@@ -177,7 +177,7 @@ your_assembly_isr:
; VOID your_assembly_isr(VOID)
; {
PUSH {r0, lr}
-;
+;
; /* Do interrupt handler work here */
; /* BL */
@@ -187,15 +187,15 @@ your_assembly_isr:
Note: the Cortex-M85 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.s file.
8. FPU Support
-ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m85/ac6/src/tx_initialize_low_level.S b/ports/cortex_m85/ac6/src/tx_initialize_low_level.S
index fca215945..a3daea70c 100644
--- a/ports/cortex_m85/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_m85/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,14 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_misra.S b/ports/cortex_m85/ac6/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m85/ac6/src/tx_misra.S
+++ b/ports/cortex_m85/ac6/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m85/ac6/src/tx_thread_context_restore.S b/ports/cortex_m85/ac6/src/tx_thread_context_restore.S
index 6320f4756..5c5a6b251 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_context_save.S b/ports/cortex_m85/ac6/src/tx_thread_context_save.S
index d5911b43b..46a1bda76 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_m85/ac6/src/tx_thread_interrupt_control.S
index 132560552..43483a790 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_m85/ac6/src/tx_thread_interrupt_disable.S
index b14623a61..e0d27e808 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_m85/ac6/src/tx_thread_interrupt_restore.S
index ffe8649f3..a844935d8 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_schedule.S b/ports/cortex_m85/ac6/src/tx_thread_schedule.S
index 202860ad5..62412fffe 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -60,23 +61,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* included tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -354,7 +338,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m85/ac6/src/tx_thread_secure_stack.c b/ports/cortex_m85/ac6/src/tx_thread_secure_stack.c
index 46ac71d30..f3582653b 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m85/ac6/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,21 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Modified comment(s), and */
-/* changed name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_allocate.S
index 99215d59c..6ecda22d6 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_free.S b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_free.S
index 441c2100e..9a9d65551 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_initialize.S
index 08b2ada05..01abe965b 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_stack_build.S b/ports/cortex_m85/ac6/src/tx_thread_stack_build.S
index 6e3fe5e93..10ed7c6a2 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m85/ac6/src/tx_thread_system_return.S b/ports/cortex_m85/ac6/src/tx_thread_system_return.S
index 9290a6212..2b335f8d3 100644
--- a/ports/cortex_m85/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_m85/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/tx_timer_interrupt.S b/ports/cortex_m85/ac6/src/tx_timer_interrupt.S
index 36266e855..8e2af8bdc 100644
--- a/ports/cortex_m85/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_m85/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m85/ac6/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m85/ac6/src/txe_thread_secure_stack_allocate.c
index 17cc9f532..43b4db089 100644
--- a/ports/cortex_m85/ac6/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m85/ac6/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m85/ac6/src/txe_thread_secure_stack_free.c b/ports/cortex_m85/ac6/src/txe_thread_secure_stack_free.c
index a41b1c24b..d64311343 100644
--- a/ports/cortex_m85/ac6/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m85/ac6/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m85/gnu/inc/tx_port.h b/ports/cortex_m85/gnu/inc/tx_port.h
index 0590434f9..9057a1324 100644
--- a/ports/cortex_m85/gnu/inc/tx_port.h
+++ b/ports/cortex_m85/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M85 files. It unifies */
/* the Cortex-M85 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M85/GNU Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M85/GNU Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m85/gnu/inc/tx_secure_interface.h b/ports/cortex_m85/gnu/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m85/gnu/inc/tx_secure_interface.h
+++ b/ports/cortex_m85/gnu/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m85/gnu/readme_threadx.txt b/ports/cortex_m85/gnu/readme_threadx.txt
index e38d20ee2..d497b0376 100644
--- a/ports/cortex_m85/gnu/readme_threadx.txt
+++ b/ports/cortex_m85/gnu/readme_threadx.txt
@@ -1,32 +1,32 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M85
+ Microsoft's Azure RTOS ThreadX for Cortex-M85
Using the GNU Tools
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into a GNU project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
-No demonstration project is provided.
+No demonstration project is provided.
3. System Initialization
-The entry point in ThreadX for the Cortex-M85 using gnu tools uses the standard GNU
+The entry point in ThreadX for the Cortex-M85 using gnu tools uses the standard GNU
Cortex-M85 reset sequence. From the reset vector the C runtime will be initialized.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source.
+The ThreadX tx_initialize_low_level.S file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
@@ -35,7 +35,7 @@ parameter to your application definition function, tx_application_define.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M85 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -118,26 +118,26 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-M85
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
6.1 Vector Area
The Cortex-M85 vectors start at the label __tx_vectors or similar. The application may modify
-the vector area according to its needs. There is code in tx_initialize_low_level() that will
-configure the vector base register.
+the vector area according to its needs. There is code in tx_initialize_low_level() that will
+configure the vector base register.
6.2 Managed Interrupts
@@ -170,15 +170,15 @@ your_assembly_isr:
Note: the Cortex-M85 requires exception handlers to be thumb labels, this implies bit 0 set.
To accomplish this, the declaration of the label has to be preceded by the assembler directive
-.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
-be inserted in the correct location in the interrupt vector table. This table is typically
+.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
+be inserted in the correct location in the interrupt vector table. This table is typically
located in either your runtime startup file or in the tx_initialize_low_level.S file.
7. FPU Support
-ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m85/gnu/src/tx_initialize_low_level.S b/ports/cortex_m85/gnu/src/tx_initialize_low_level.S
index e34d1d6f7..22dc0780f 100644
--- a/ports/cortex_m85/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_m85/gnu/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,16 +66,6 @@ HEAP_SIZE = 0x00000000
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_misra.S b/ports/cortex_m85/gnu/src/tx_misra.S
index 8ac0c629f..10548671a 100644
--- a/ports/cortex_m85/gnu/src/tx_misra.S
+++ b/ports/cortex_m85/gnu/src/tx_misra.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -667,7 +668,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -682,7 +683,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARM_FP
/***********************************************************************************************/
@@ -699,8 +700,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -714,9 +715,9 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
+
.data
.word 0
diff --git a/ports/cortex_m85/gnu/src/tx_thread_context_restore.S b/ports/cortex_m85/gnu/src/tx_thread_context_restore.S
index 56c068869..6daf837e3 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_context_save.S b/ports/cortex_m85/gnu/src/tx_thread_context_save.S
index e6bf9501f..8af9fbb17 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_m85/gnu/src/tx_thread_interrupt_control.S
index acf053100..431c2e38b 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_m85/gnu/src/tx_thread_interrupt_disable.S
index 092c3b556..e734b6f42 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_m85/gnu/src/tx_thread_interrupt_restore.S
index 34530d709..9e874ecab 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,14 +55,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_schedule.S b/ports/cortex_m85/gnu/src/tx_thread_schedule.S
index 91a60319b..f46f57379 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,24 +57,6 @@
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Scott Larson Fixed predefined macro name, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -351,7 +334,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m85/gnu/src/tx_thread_secure_stack.c b/ports/cortex_m85/gnu/src/tx_thread_secure_stack.c
index 51a93e185..0d0cf1a34 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m85/gnu/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -98,21 +99,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* disable optimizations, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry, optimize(0)))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_allocate.S b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_allocate.S
index 907cb845f..02e27a3cf 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_allocate.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_allocate.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,14 +56,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_free.S b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_free.S
index a7ebdd539..da5a2520a 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_free.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_free.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,14 +54,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_initialize.S
index fcf88b53f..3f17fc594 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_secure_stack_initialize.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -53,18 +54,6 @@
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_stack_build.S b/ports/cortex_m85/gnu/src/tx_thread_stack_build.S
index 17f0fe269..b22d08300 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m85/gnu/src/tx_thread_system_return.S b/ports/cortex_m85/gnu/src/tx_thread_system_return.S
index a2b94618d..bbb5a6303 100644
--- a/ports/cortex_m85/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m85/gnu/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,14 +57,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/tx_timer_interrupt.S b/ports/cortex_m85/gnu/src/tx_timer_interrupt.S
index 21ab9f631..0113be17e 100644
--- a/ports/cortex_m85/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_m85/gnu/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,14 +58,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-08-2023 Scott Larson Include tx_user.h, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m85/gnu/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m85/gnu/src/txe_thread_secure_stack_allocate.c
index 17cc9f532..43b4db089 100644
--- a/ports/cortex_m85/gnu/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m85/gnu/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m85/gnu/src/txe_thread_secure_stack_free.c b/ports/cortex_m85/gnu/src/txe_thread_secure_stack_free.c
index a41b1c24b..d64311343 100644
--- a/ports/cortex_m85/gnu/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m85/gnu/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m85/iar/inc/tx_port.h b/ports/cortex_m85/iar/inc/tx_port.h
index 46f53b8bd..bf2450495 100644
--- a/ports/cortex_m85/iar/inc/tx_port.h
+++ b/ports/cortex_m85/iar/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -45,39 +46,6 @@
/* This file replaces the previous Cortex-M85 files. It unifies */
/* the Cortex-M85 compilers into one common file. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 03-02-2021 Scott Larson Modified comment(s), added */
-/* ULONG64_DEFINED, */
-/* resulting in version 6.1.5 */
-/* 06-02-2021 Scott Larson Modified comment(s), removed */
-/* unneeded header file, funcs */
-/* set_control and get_control */
-/* changed to inline, */
-/* added symbol to enable */
-/* stack error handler, */
-/* resulting in version 6.1.7 */
-/* 10-15-2021 Scott Larson Modified comment(s), improved */
-/* stack check error handling, */
-/* resulting in version 6.1.9 */
-/* 01-31-2022 Scott Larson Modified comment(s), unified */
-/* this file across compilers, */
-/* fixed predefined macro, */
-/* resulting in version 6.1.10 */
-/* 04-25-2022 Scott Larson Modified comments and added */
-/* volatile to registers, */
-/* resulting in version 6.1.11 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* described BASEPRI usage, */
-/* resulting in version 6.1.12 */
-/* 03-08-2023 Scott Larson Removed unneeded #include, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -645,7 +613,7 @@ VOID _tx_thread_interrupt_restore(UIN
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-M85/IAR Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-M85/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_m85/iar/inc/tx_secure_interface.h b/ports/cortex_m85/iar/inc/tx_secure_interface.h
index 39b5d5fd3..5ac37fbf4 100644
--- a/ports/cortex_m85/iar/inc/tx_secure_interface.h
+++ b/ports/cortex_m85/iar/inc/tx_secure_interface.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,12 +38,6 @@
/* It is assumed that tx_api.h and tx_port.h have already been */
/* included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_SECURE_INTERFACE_H
diff --git a/ports/cortex_m85/iar/readme_threadx.txt b/ports/cortex_m85/iar/readme_threadx.txt
index 6a39bbc75..6436cfa82 100644
--- a/ports/cortex_m85/iar/readme_threadx.txt
+++ b/ports/cortex_m85/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-M85
+ Microsoft's Azure RTOS ThreadX for Cortex-M85
Using the IAR Tools
@@ -6,33 +6,33 @@
1. Building the ThreadX run-time Library
Import all ThreadX common and port-specific source files into an IAR project.
-Configure the project to build a library rather than an executable. This
-results in the ThreadX run-time library file tx.a, which is needed by
+Configure the project to build a library rather than an executable. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
-Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
-replace the common files of the same name.
+Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
+replace the common files of the same name.
2. Demonstration System
No demonstration is provided because the IAR EWARM 8.50 simulator does
-not simulate the Cortex-M85 correctly.
+not simulate the Cortex-M85 correctly.
3. System Initialization
-The entry point in ThreadX for the Cortex-M85 using IAR tools is at label
-__iar_program_start. This is defined within the IAR compiler's startup code.
-In addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-M85 using IAR tools is at label
+__iar_program_start. This is defined within the IAR compiler's startup code.
+In addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
@@ -41,7 +41,7 @@ other RAM sections in memory.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have the same stack frame in the Cortex-M85 version of
-ThreadX. The top of the suspended thread's stack is pointed to by
+ThreadX. The top of the suspended thread's stack is pointed to by
tx_thread_stack_ptr in the associated thread control block TX_THREAD.
Non-FPU Stack Frame:
@@ -124,17 +124,17 @@ FPU Stack Frame (only interrupted thread with FPU enabled):
5. Improving Performance
-To make ThreadX and the application(s) run faster, you can enable
-all compiler optimizations.
+To make ThreadX and the application(s) run faster, you can enable
+all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
6. Interrupt Handling
-The Cortex-M85 vectors start at the label __vector_table and is typically defined in a
+The Cortex-M85 vectors start at the label __vector_table and is typically defined in a
startup.s file (or similar). The application may modify the vector area according to its needs.
@@ -182,14 +182,14 @@ should have the following line added (if not already in place):
initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
-The project options "General Options -> Library Configuration" should also have the
+The project options "General Options -> Library Configuration" should also have the
"Enable thread support in library" box selected.
8. VFP Support
-ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
-can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
+ThreadX for Cortex-M85 supports automatic ("lazy") VFP support, which means that applications threads
+can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
context.
diff --git a/ports/cortex_m85/iar/src/tx_iar.c b/ports/cortex_m85/iar/src/tx_iar.c
index ee47f10fb..238b485ee 100644
--- a/ports/cortex_m85/iar/src/tx_iar.c
+++ b/ports/cortex_m85/iar/src/tx_iar.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_m85/iar/src/tx_initialize_low_level.s b/ports/cortex_m85/iar/src/tx_initialize_low_level.s
index 9c1138813..64260c520 100644
--- a/ports/cortex_m85/iar/src/tx_initialize_low_level.s
+++ b/ports/cortex_m85/iar/src/tx_initialize_low_level.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,13 +75,6 @@ __tx_free_memory_start
/* CALLED BY */
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_initialize_low_level(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_misra.s b/ports/cortex_m85/iar/src/tx_misra.s
index f86d9a656..642bb89e4 100644
--- a/ports/cortex_m85/iar/src/tx_misra.s
+++ b/ports/cortex_m85/iar/src/tx_misra.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -120,7 +121,7 @@
SECTION `.data`:DATA:REORDER:NOROOT(2)
DATA
-// 51 CHAR _tx_version_id[100] = "Copyright (c) 2024 Microsoft Corporation. * ThreadX 6.1 MISRA C Compliant *";
+// 51 CHAR _tx_version_id[100] = "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX 6.1 MISRA C Compliant *";
_tx_version_id:
DC8 43H, 6FH, 70H, 79H, 72H, 69H, 67H, 68H
DC8 74H, 20H, 28H, 63H, 29H, 20H, 31H, 39H
@@ -707,7 +708,7 @@ _tx_misra_control_get:
MRS R0, CONTROL
BX LR // return
-
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -722,7 +723,7 @@ _tx_misra_control_set:
MSR CONTROL, R0
BX LR // return
-
+
#ifdef __ARMVFP__
/***********************************************************************************************/
@@ -739,8 +740,8 @@ _tx_misra_fpccr_get:
LDR r0, =0xE000EF34 // Build FPCCR address
LDR r0, [r0] // Load FPCCR value
BX LR // return
-
-
+
+
/***********************************************************************************************/
/***********************************************************************************************/
/** */
@@ -754,10 +755,10 @@ _tx_misra_fpccr_get:
_tx_misra_vfp_touch:
vmov.f32 s0, s0
BX LR // return
-
+
#endif
-
-
+
+
SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
diff --git a/ports/cortex_m85/iar/src/tx_thread_context_restore.s b/ports/cortex_m85/iar/src/tx_thread_context_restore.s
index 349d3e20b..ca9146449 100644
--- a/ports/cortex_m85/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_m85/iar/src/tx_thread_context_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_restore(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_context_save.s b/ports/cortex_m85/iar/src/tx_thread_context_save.s
index dcad5553b..ec1c35388 100644
--- a/ports/cortex_m85/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_m85/iar/src/tx_thread_context_save.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_context_save(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_interrupt_control.s b/ports/cortex_m85/iar/src/tx_thread_interrupt_control.s
index 86f54c3e1..24cc2ff72 100644
--- a/ports/cortex_m85/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_m85/iar/src/tx_thread_interrupt_control.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_control(UINT new_posture)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_m85/iar/src/tx_thread_interrupt_disable.s
index d58176c25..414b53ddd 100644
--- a/ports/cortex_m85/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_m85/iar/src/tx_thread_interrupt_disable.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_interrupt_disable(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_m85/iar/src/tx_thread_interrupt_restore.s
index d21b373ea..c9ce15968 100644
--- a/ports/cortex_m85/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_m85/iar/src/tx_thread_interrupt_restore.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -55,13 +56,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_interrupt_restore(UINT previous_posture)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_schedule.s b/ports/cortex_m85/iar/src/tx_thread_schedule.s
index d54fd420c..fa2d7ba04 100644
--- a/ports/cortex_m85/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_m85/iar/src/tx_thread_schedule.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,23 +74,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* _tx_thread_system_return Return to system from thread */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 04-02-2021 Scott Larson Modified comment(s), added */
-/* low power code, */
-/* resulting in version 6.1.6 */
-/* 06-02-2021 Scott Larson Added secure stack initialize */
-/* in SVC handler, */
-/* resulting in version 6.1.7 */
-/* 04-25-2022 Scott Larson Added BASEPRI support, */
-/* resulting in version 6.1.11 */
-/* 03-08-2023 Scott Larson Added preproc FPU option, */
-/* resulting in version 6.2.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_schedule(VOID)
// {
@@ -348,7 +332,7 @@ SVC_Handler:
CMP r1, #2 // Is it a secure stack free request?
BEQ _tx_svc_secure_free // Yes, go there
-
+
CMP r1, #3 // Is it a secure stack init request?
BEQ _tx_svc_secure_init // Yes, go there
diff --git a/ports/cortex_m85/iar/src/tx_thread_secure_stack.c b/ports/cortex_m85/iar/src/tx_thread_secure_stack.c
index 4360e63b8..c4b79ad1b 100644
--- a/ports/cortex_m85/iar/src/tx_thread_secure_stack.c
+++ b/ports/cortex_m85/iar/src/tx_thread_secure_stack.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -102,20 +103,6 @@ static INT tx_head_free_index = 0U;
/* */
/* _tx_initialize_kernel_enter */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* 10-16-2020 Scott Larson Modified comment(s), */
-/* resulting in version 6.1.1 */
-/* 06-02-2021 Scott Larson Change name, execute in */
-/* handler mode, */
-/* resulting in version 6.1.7 */
-/* 01-31-2022 Himanshu Gupta Modified comments(s), updated */
-/* secure stack allocation, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
__attribute__((cmse_nonsecure_entry))
UINT _tx_thread_secure_mode_stack_initialize(void)
diff --git a/ports/cortex_m85/iar/src/tx_thread_secure_stack_allocate.s b/ports/cortex_m85/iar/src/tx_thread_secure_stack_allocate.s
index 7cb99950a..112f01363 100644
--- a/ports/cortex_m85/iar/src/tx_thread_secure_stack_allocate.s
+++ b/ports/cortex_m85/iar/src/tx_thread_secure_stack_allocate.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -56,13 +57,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_secure_stack_free.s b/ports/cortex_m85/iar/src/tx_thread_secure_stack_free.s
index 206369e64..e0cc7a874 100644
--- a/ports/cortex_m85/iar/src/tx_thread_secure_stack_free.s
+++ b/ports/cortex_m85/iar/src/tx_thread_secure_stack_free.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,13 +55,6 @@
/* CALLED BY */
/* */
/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// UINT _tx_thread_secure_stack_free(TX_THREAD *thread_ptr)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_secure_stack_initialize.s b/ports/cortex_m85/iar/src/tx_thread_secure_stack_initialize.s
index dd92ca35b..364044bc3 100644
--- a/ports/cortex_m85/iar/src/tx_thread_secure_stack_initialize.s
+++ b/ports/cortex_m85/iar/src/tx_thread_secure_stack_initialize.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,17 +55,6 @@
/* CALLED BY */
/* */
/* TX_PORT_SPECIFIC_PRE_INITIALIZATION */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 06-02-2021 Scott Larson Initial Version 6.1.7 */
-/* 07-29-2022 Scott Larson Modified comments and changed */
-/* secure stack initialization */
-/* macro to port-specific, */
-/* resulting in version 6.1.12 */
-/* */
/**************************************************************************/
// VOID _tx_thread_secure_stack_initialize(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_stack_build.s b/ports/cortex_m85/iar/src/tx_thread_stack_build.s
index d21f51b31..b6b5837e8 100644
--- a/ports/cortex_m85/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_m85/iar/src/tx_thread_stack_build.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* _tx_thread_create Create thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
// {
diff --git a/ports/cortex_m85/iar/src/tx_thread_system_return.s b/ports/cortex_m85/iar/src/tx_thread_system_return.s
index 07d9a5dd9..768262a2a 100644
--- a/ports/cortex_m85/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_m85/iar/src/tx_thread_system_return.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -57,13 +58,6 @@
/* CALLED BY */
/* */
/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_thread_system_return(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/tx_timer_interrupt.s b/ports/cortex_m85/iar/src/tx_timer_interrupt.s
index e1ce095a0..b7d7c589f 100644
--- a/ports/cortex_m85/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_m85/iar/src/tx_timer_interrupt.s
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -71,13 +72,6 @@
/* CALLED BY */
/* */
/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
// VOID _tx_timer_interrupt(VOID)
// {
diff --git a/ports/cortex_m85/iar/src/txe_thread_secure_stack_allocate.c b/ports/cortex_m85/iar/src/txe_thread_secure_stack_allocate.c
index 17cc9f532..43b4db089 100644
--- a/ports/cortex_m85/iar/src/txe_thread_secure_stack_allocate.c
+++ b/ports/cortex_m85/iar/src/txe_thread_secure_stack_allocate.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -63,12 +64,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_size)
{
@@ -76,10 +71,10 @@ UINT _txe_thread_secure_stack_allocate(TX_THREAD *thread_ptr, ULONG stack_siz
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_m85/iar/src/txe_thread_secure_stack_free.c b/ports/cortex_m85/iar/src/txe_thread_secure_stack_free.c
index a41b1c24b..d64311343 100644
--- a/ports/cortex_m85/iar/src/txe_thread_secure_stack_free.c
+++ b/ports/cortex_m85/iar/src/txe_thread_secure_stack_free.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -61,12 +62,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 Scott Larson Initial Version 6.1 */
-/* */
/**************************************************************************/
UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
{
@@ -74,10 +69,10 @@ UINT _txe_thread_secure_stack_free(TX_THREAD *thread_ptr)
return(TX_FEATURE_NOT_ENABLED);
#else
UINT status;
-
+
/* Default status to success. */
status = TX_SUCCESS;
-
+
/* Check for an invalid thread pointer. */
if (thread_ptr == TX_NULL)
{
@@ -93,7 +88,7 @@ UINT status;
/* Thread pointer is invalid, return appropriate error code. */
status = TX_THREAD_ERROR;
}
-
+
/* Check for interrupt call. */
if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
{
@@ -104,7 +99,7 @@ UINT status;
status = TX_CALLER_ERROR;
}
}
-
+
/* Determine if everything is okay. */
if (status == TX_SUCCESS)
{
diff --git a/ports/cortex_r4/ac5/example_build/sample_threadx.c b/ports/cortex_r4/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_r4/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_r4/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r4/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_r4/ac5/example_build/tx_initialize_low_level.s
index c36819eb6..6d7ddf4f7 100644
--- a/ports/cortex_r4/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_r4/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -90,45 +90,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -179,7 +173,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -201,7 +195,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -253,7 +247,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -261,21 +255,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -285,7 +279,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -301,28 +295,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -331,7 +325,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -353,11 +347,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_r4/ac5/inc/tx_port.h b/ports/cortex_r4/ac5/inc/tx_port.h
index c77e31468..072332903 100644
--- a/ports/cortex_r4/ac5/inc/tx_port.h
+++ b/ports/cortex_r4/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R4/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R4/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -325,8 +317,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R4/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R4/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r4/ac5/readme_threadx.txt b/ports/cortex_r4/ac5/readme_threadx.txt
index d27aa166e..718f1c03d 100644
--- a/ports/cortex_r4/ac5/readme_threadx.txt
+++ b/ports/cortex_r4/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R4
+ Microsoft's Azure RTOS ThreadX for Cortex-R4
Thumb & 32-bit Mode
@@ -6,21 +6,21 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -29,45 +29,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-R4 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-R4 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -83,10 +83,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -97,161 +97,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -269,39 +269,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R4 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -312,12 +312,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -325,7 +325,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -338,7 +338,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -348,12 +348,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -370,22 +370,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -393,10 +393,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -409,12 +409,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -423,7 +423,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -451,18 +451,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -478,7 +478,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -494,29 +494,29 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-R4 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
10. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_r4/ac5/src/tx_thread_context_restore.s b/ports/cortex_r4/ac5/src/tx_thread_context_restore.s
index 3a4eef8c2..0572cd1cf 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_r4/ac5/src/tx_thread_context_save.s b/ports/cortex_r4/ac5/src/tx_thread_context_save.s
index c03187e48..c3c6de9b2 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -108,7 +102,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -124,7 +118,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -138,13 +132,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -164,7 +158,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -174,7 +168,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -189,7 +183,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_r4/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_r4/ac5/src/tx_thread_fiq_context_restore.s
index e2a712a75..89cab39df 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -163,7 +157,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -207,7 +201,7 @@ _tx_skip_fiq_vfp_save
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -219,7 +213,7 @@ _tx_skip_fiq_vfp_save
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_r4/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_r4/ac5/src/tx_thread_fiq_context_save.s
index 9026e56d4..8fd1fcac9 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_end.s
index a26bab460..2f67e820e 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_start.s
index d714b4b3a..d5e01f065 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_r4/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_r4/ac5/src/tx_thread_interrupt_control.s
index e69cb941e..e242582cd 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_r4/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_r4/ac5/src/tx_thread_interrupt_disable.s
index 239cb49e1..62158e06e 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_r4/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_r4/ac5/src/tx_thread_interrupt_restore.s
index bbf8ccd76..36bdebf14 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_end.s
index 2c718a747..ab4ff39b8 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_start.s
index 2bd74a99e..01442b0c7 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r4/ac5/src/tx_thread_schedule.s b/ports/cortex_r4/ac5/src/tx_thread_schedule.s
index 64af5589f..fb7882688 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +40,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +101,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +114,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +128,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/cortex_r4/ac5/src/tx_thread_stack_build.s b/ports/cortex_r4/ac5/src/tx_thread_stack_build.s
index 2f21d30cc..d2ffcd2f9 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-R4 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_r4/ac5/src/tx_thread_system_return.s b/ports/cortex_r4/ac5/src/tx_thread_system_return.s
index f6128d56a..cd3ffb000 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -103,7 +97,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
MRS r1, CPSR ; Pickup the CPSR
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
; /* Lockout interrupts. */
;
IF :DEF:TX_ENABLE_FIQ_SUPPORT
diff --git a/ports/cortex_r4/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_r4/ac5/src/tx_thread_vectored_context_save.s
index aec5717d7..8d3f023d0 100644
--- a/ports/cortex_r4/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_r4/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -107,7 +101,7 @@ _tx_thread_vectored_context_save
; /* Return to the ISR. */
;
MOV r10, #0 ; Clear stack limit
-
+
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
; /* Call the ISR enter function to indicate an ISR is executing. */
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_r4/ac5/src/tx_timer_interrupt.s b/ports/cortex_r4/ac5/src/tx_timer_interrupt.s
index a5d96fda6..10e49b6c9 100644
--- a/ports/cortex_r4/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_r4/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-R4/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-R4/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_r4/ac6/example_build/sample_threadx/.cproject b/ports/cortex_r4/ac6/example_build/sample_threadx/.cproject
index e2104d213..4265aaf8e 100644
--- a/ports/cortex_r4/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_r4/ac6/example_build/sample_threadx/.cproject
@@ -1,158 +1,158 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.c
index a32037a6b..6a996f775 100644
--- a/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -85,41 +85,41 @@ CHAR *pointer = TX_NULL;
/* Create the main thread. */
tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
status = tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -127,23 +127,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -246,11 +246,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -309,7 +309,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -362,7 +362,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.scat
index 926647b25..9eb35ca07 100644
--- a/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_r4/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -18,21 +18,21 @@ SDRAM 0x0 0x40000000
* (+RO-CODE) ; Application RO code (.text)
* (+RO-DATA) ; Application RO data (.constdata)
}
-
+
IRQ_STACK +0 ALIGN 8 EMPTY 1024 {}
-
+
FIQ_STACK +0 ALIGN 8 EMPTY 512 {}
-
+
SVC_STACK +0 ALIGN 8 EMPTY 2048 {}
-
+
SYS_STACK +0 ALIGN 8 EMPTY 2048 {}
-
+
ABORT_STACK +0 ALIGN 8 EMPTY 2048 {}
; Application RW & ZI data (.data & .bss)
DATA +0 0x100000
{
- * (+RW,+ZI)
+ * (+RW,+ZI)
}
PERIPHERALS 0xA0000000 EMPTY 0x20000000 { }; Peripherals
diff --git a/ports/cortex_r4/ac6/example_build/sample_threadx/startup.S b/ports/cortex_r4/ac6/example_build/sample_threadx/startup.S
index 98d3b2b15..cc59bcd90 100644
--- a/ports/cortex_r4/ac6/example_build/sample_threadx/startup.S
+++ b/ports/cortex_r4/ac6/example_build/sample_threadx/startup.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2006-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//----------------------------------------------------------------
@@ -196,7 +196,7 @@ Reset_Handler:
// Enable Branch prediction
//----------------------------------------------------------------
-// In the Cortex-R4, the Z-bit of the SCTLR does not control the program flow prediction.
+// In the Cortex-R4, the Z-bit of the SCTLR does not control the program flow prediction.
// Some control bits in the ACTLR control the program flow and prefetch features instead.
// These are enabled by default, but are shown here for completeness.
diff --git a/ports/cortex_r4/ac6/example_build/tx/.cproject b/ports/cortex_r4/ac6/example_build/tx/.cproject
index 87d4b7819..e1eba1a5d 100644
--- a/ports/cortex_r4/ac6/example_build/tx/.cproject
+++ b/ports/cortex_r4/ac6/example_build/tx/.cproject
@@ -1,162 +1,162 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_r4/ac6/inc/tx_port.h b/ports/cortex_r4/ac6/inc/tx_port.h
index 357b2298c..ff4ed9d13 100644
--- a/ports/cortex_r4/ac6/inc/tx_port.h
+++ b/ports/cortex_r4/ac6/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R4/AC6 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R4/AC6 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -78,7 +70,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -114,12 +106,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -129,8 +121,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -177,7 +169,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -189,13 +181,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -209,11 +201,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -221,8 +213,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -249,21 +241,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -283,7 +275,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -292,7 +284,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -328,8 +320,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R4/AC6 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R4/AC6 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r4/ac6/readme_threadx.txt b/ports/cortex_r4/ac6/readme_threadx.txt
index b861033f8..9c0019aae 100644
--- a/ports/cortex_r4/ac6/readme_threadx.txt
+++ b/ports/cortex_r4/ac6/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R4
+ Microsoft's Azure RTOS ThreadX for Cortex-R4
Thumb & 32-bit Mode
@@ -6,12 +6,12 @@
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first move
-the project folders into your DS workspace directory. The project folders are
-named 'tx' and 'sample_threadx' and are located in the installation directory.
+In order to build the ThreadX library and the ThreadX demonstration, first move
+the project folders into your DS workspace directory. The project folders are
+named 'tx' and 'sample_threadx' and are located in the installation directory.
Now that the projects are in the workspace directory, import them into DS by
-doing the following for each project:
+doing the following for each project:
1. Click 'File -> Import -> Existing Projects into Workspace'
2. Set the root directory the project i.e. the 'tx' or 'sample_threadx' directory
@@ -23,8 +23,8 @@ This is expected, so please do so.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -34,41 +34,41 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS-5 debugger on the
VE_Cortex-R4 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-r4_tx.launch' file, click
'Debug As', and then click 'cortex-r4_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-R4 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-R4 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for determining the
-first available RAM address for use by the application, which is supplied as the
+The ThreadX tx_initialize_low_level.s file is responsible for determining the
+first available RAM address for use by the application, which is supplied as the
sole input parameter to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -86,39 +86,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R4 vectors start at address zero. The demonstration system startup.S
-file contains the vectors and is loaded at address zero. On actual hardware platforms,
-this area might have to be copied to address 0.
+file contains the vectors and is loaded at address zero. On actual hardware platforms,
+this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -129,8 +129,8 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
.global __tx_irq_handler
@@ -159,7 +159,7 @@ __tx_irq_handler:
7.2.2 Vectored IRQ ISRs
The vectored ARM ISR mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example ISR handler defined in
+by the particular implementation. The following is an example ISR handler defined in
tx_initialize_low_level.s:
.global __tx_example_vectored_irq_handler
@@ -200,18 +200,18 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
@@ -249,12 +249,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -263,7 +263,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -293,18 +293,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -322,7 +322,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -338,28 +338,28 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-R4 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. To build ThreadX
-assembly files in Thumb mode, define TX_THUMB_MODE.
+By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. To build ThreadX
+assembly files in Thumb mode, define TX_THUMB_MODE.
10. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
diff --git a/ports/cortex_r4/ac6/src/tx_initialize_low_level.S b/ports/cortex_r4/ac6/src/tx_initialize_low_level.S
index c14ebc5d4..a4f0ada00 100644
--- a/ports/cortex_r4/ac6/src/tx_initialize_low_level.S
+++ b/ports/cortex_r4/ac6/src/tx_initialize_low_level.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -100,12 +101,6 @@
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_initialize_low_level(VOID)
{ */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_context_restore.S b/ports/cortex_r4/ac6/src/tx_thread_context_restore.S
index 410b465ff..512038436 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -54,7 +55,7 @@
#endif
.text
.eabi_attribute Tag_ABI_align_preserved, 1
-
+
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
@@ -88,12 +89,6 @@
/* */
/* ISRs Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_context_restore(VOID)
{ */
@@ -181,15 +176,15 @@ __tx_thread_preempt_restore:
LDMIA sp!, {r3, r10, r12, lr} // Recover temporarily saved registers
MOV r1, lr // Save lr (point of interrupt)
-
+
CPS #SVC_MODE // Switch to SVC mode to save context on thread stack
STR r1, [sp, #-4]! // Save point of interrupt
STMDB sp!, {r4-r12, lr} // Save upper half of registers
MOV r4, r3 // Save SPSR in r4
-
+
CPS #IRQ_MODE // Switch back to IRQ mode
LDMIA sp!, {r0-r3} // Recover r0-r3
-
+
CPS #SVC_MODE // Switch to SVC mode to save remaining context on thread stack
STMDB sp!, {r0-r3} // Save r0-r3 on thread's stack
diff --git a/ports/cortex_r4/ac6/src/tx_thread_context_save.S b/ports/cortex_r4/ac6/src/tx_thread_context_save.S
index 696dc985a..68951b08b 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -76,12 +77,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_context_save(VOID)
{ */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_r4/ac6/src/tx_thread_fiq_context_restore.S
index 94c20b723..7fbcc84ae 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -88,12 +89,6 @@
/* */
/* FIQ ISR Interrupt Service Routines */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_fiq_context_restore(VOID) */
/* { */
@@ -186,15 +181,15 @@ __tx_thread_fiq_preempt_restore:
LDMIA sp!, {r3, lr} // Recover temporarily saved registers
MOV r1, lr // Save lr (point of interrupt)
-
+
CPS #SVC_MODE // Switch to SVC mode to save context on thread stack
STR r1, [sp, #-4]! // Save point of interrupt
STMDB sp!, {r4-r12, lr} // Save upper half of registers
MOV r4, r3 // Save SPSR in r4
-
+
CPS #FIQ_MODE // Switch back to FIQ mode
LDMIA sp!, {r0-r3} // Recover r0-r3
-
+
CPS #SVC_MODE // Switch to SVC mode to save remaining context on thread stack
STMDB sp!, {r0-r3} // Save r0-r3 on thread's stack
diff --git a/ports/cortex_r4/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_r4/ac6/src/tx_thread_fiq_context_save.S
index 1d85abe55..3c1333b35 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_fiq_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -76,12 +77,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_fiq_context_save(VOID) */
/* { */
@@ -90,7 +85,7 @@
.type _tx_thread_fiq_context_save, "function"
_tx_thread_fiq_context_save:
- /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+ /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
out, we are in IRQ mode, and all registers are intact. */
/* Check for a nested interrupt condition. */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_end.S
index df8a46335..5abbdddf1 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,12 +78,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_fiq_nesting_end(VOID) */
/* { */
@@ -90,13 +85,13 @@
.type _tx_thread_fiq_nesting_end, "function"
_tx_thread_fiq_nesting_end:
MOV r3, lr // Save ISR return address
-
+
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if // Disable IRQ and FIQ interrupts
#else
CPSID i // Disable IRQ interrupts
#endif
-
+
LDMIA sp!, {r1, lr} // Pickup saved lr (and r1 throw-away for
// 8-byte alignment logic)
CPS #FIQ_MODE // Switch back to FIQ mode
diff --git a/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_start.S
index f26d9a0c3..73564d78c 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,12 +75,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_fiq_nesting_start(VOID) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_r4/ac6/src/tx_thread_interrupt_control.S
index 11ab4e4f9..83aa06c46 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_interrupt_control.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -73,12 +74,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_control(UINT new_posture) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_r4/ac6/src/tx_thread_interrupt_disable.S
index cd7476a66..d605e0341 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_interrupt_disable.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -65,12 +66,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_disable(void) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_r4/ac6/src/tx_thread_interrupt_restore.S
index 8e966de64..f9315d7f9 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_interrupt_restore.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -66,12 +67,6 @@
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* UINT _tx_thread_interrupt_restore(UINT old_posture) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_end.S
index cf8e0ac12..664e02c5d 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,12 +78,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_irq_nesting_end(VOID) */
/* { */
@@ -96,7 +91,7 @@ _tx_thread_irq_nesting_end:
#else
CPSID i // Disable IRQ interrupts
#endif
-
+
LDMIA sp!, {r1, lr} // Pickup saved lr (and r1 throw-away for
// 8-byte alignment logic)
CPS #IRQ_MODE // Switch back to IRQ mode
diff --git a/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_start.S
index b3ebe405b..1d50b4845 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,12 +75,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_irq_nesting_start(VOID) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_schedule.S b/ports/cortex_r4/ac6/src/tx_thread_schedule.S
index c12d54429..7148bd9ee 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_schedule.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -74,12 +75,6 @@
/* _tx_thread_system_return Return to system from thread */
/* _tx_thread_context_restore Restore thread's context */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_schedule(VOID) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_stack_build.S b/ports/cortex_r4/ac6/src/tx_thread_stack_build.S
index 9f72ba6c7..a29931360 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_stack_build.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -79,12 +80,6 @@
/* */
/* _tx_thread_create Create thread service */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID)) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_system_return.S b/ports/cortex_r4/ac6/src/tx_thread_system_return.S
index 2c5f11d68..048b45258 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_system_return.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -77,12 +78,6 @@
/* */
/* ThreadX components */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_system_return(VOID) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_r4/ac6/src/tx_thread_vectored_context_save.S
index de49cc0d4..dbb40abac 100644
--- a/ports/cortex_r4/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_r4/ac6/src/tx_thread_vectored_context_save.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -75,12 +76,6 @@
/* */
/* ISRs */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_thread_vectored_context_save(VOID) */
/* { */
diff --git a/ports/cortex_r4/ac6/src/tx_timer_interrupt.S b/ports/cortex_r4/ac6/src/tx_timer_interrupt.S
index d48313efe..8c3abf904 100644
--- a/ports/cortex_r4/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_r4/ac6/src/tx_timer_interrupt.S
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -84,12 +85,6 @@
/* */
/* interrupt vector */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
/* VOID _tx_timer_interrupt(VOID) */
/* { */
diff --git a/ports/cortex_r4/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_r4/ghs/example_build/tx_initialize_low_level.arm
index e9271a0ec..212056fb7 100644
--- a/ports/cortex_r4/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_r4/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/inc/tx_el.h b/ports/cortex_r4/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_r4/ghs/inc/tx_el.h
+++ b/ports/cortex_r4/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_r4/ghs/inc/tx_port.h b/ports/cortex_r4/ghs/inc/tx_port.h
index 8bdac17bd..22daf8ea9 100644
--- a/ports/cortex_r4/ghs/inc/tx_port.h
+++ b/ports/cortex_r4/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -384,7 +376,7 @@ asm void restore_ints(int a)
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R4/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R4/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r4/ghs/readme_threadx.txt b/ports/cortex_r4/ghs/readme_threadx.txt
index f0fe2220f..b7e10db3c 100644
--- a/ports/cortex_r4/ghs/readme_threadx.txt
+++ b/ports/cortex_r4/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R4
+ Microsoft's Azure RTOS ThreadX for Cortex-R4
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-R4 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-R4 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-R4 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-R4 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-R4 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-R4 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,22 +475,22 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-R4 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
@@ -503,7 +503,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-R4/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-R4/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_r4/ghs/src/tx_el.c b/ports/cortex_r4/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_r4/ghs/src/tx_el.c
+++ b/ports/cortex_r4/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_r4/ghs/src/tx_thread_context_restore.arm b/ports/cortex_r4/ghs/src/tx_thread_context_restore.arm
index 75450de71..6e9ef7d74 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_context_save.arm b/ports/cortex_r4/ghs/src/tx_thread_context_save.arm
index 416edebc1..adf474ce6 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_r4/ghs/src/tx_thread_fiq_context_restore.arm
index bdee59051..c41f52171 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_r4/ghs/src/tx_thread_fiq_context_save.arm
index d60d41749..e51721ff4 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_end.arm
index fe229cd57..606bb33b9 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_start.arm
index 2c81a48c1..a79e0ef13 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_r4/ghs/src/tx_thread_interrupt_control.arm
index ad438998b..21642ef3f 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_r4/ghs/src/tx_thread_interrupt_disable.arm
index 14fc9798c..8fef75d15 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_r4/ghs/src/tx_thread_interrupt_restore.arm
index 01794ebbf..145588dae 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_end.arm
index 9c0dfe53e..60b918540 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_start.arm
index d83340e3d..e132b8774 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_schedule.arm b/ports/cortex_r4/ghs/src/tx_thread_schedule.arm
index 38b6d6937..a902fef1b 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_stack_build.arm b/ports/cortex_r4/ghs/src/tx_thread_stack_build.arm
index a6de73896..6bb4de3c8 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_system_return.arm b/ports/cortex_r4/ghs/src/tx_thread_system_return.arm
index ea2fe6bb9..3e4c34b05 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_r4/ghs/src/tx_thread_vectored_context_save.arm
index 18c844f49..764ee154b 100644
--- a/ports/cortex_r4/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_r4/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/ghs/src/tx_timer_interrupt.arm b/ports/cortex_r4/ghs/src/tx_timer_interrupt.arm
index b7303701a..e6c8ac0eb 100644
--- a/ports/cortex_r4/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_r4/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r4/gnu/example_build/crt0.S b/ports/cortex_r4/gnu/example_build/crt0.S
index aa0f32396..56b6c9580 100644
--- a/ports/cortex_r4/gnu/example_build/crt0.S
+++ b/ports/cortex_r4/gnu/example_build/crt0.S
@@ -26,13 +26,13 @@ _mainCRTStartup:
mov a2, #0 /* Second arg: fill value */
mov fp, a2 /* Null frame pointer */
mov r7, a2 /* Null frame pointer for Thumb */
-
+
ldr a1, .LC1 /* First arg: start of memory block */
- ldr a3, .LC2
+ ldr a3, .LC2
sub a3, a3, a1 /* Third arg: length of block */
-
-
+
+
bl memset
mov r0, #0 /* no arguments */
mov r1, #0 /* no argv either */
@@ -48,15 +48,15 @@ _mainCRTStartup:
/* bl init */
mov r0, r4
mov r1, r5
-#endif
+#endif
bl main
bl exit /* Should not return. */
-
- /* For Thumb, constants must be after the code since only
+
+ /* For Thumb, constants must be after the code since only
positive offsets are supported for PC relative addresses. */
-
+
.align 0
.LC0:
.LC1:
diff --git a/ports/cortex_r4/gnu/example_build/reset.S b/ports/cortex_r4/gnu/example_build/reset.S
index a11c826a3..5d05258bb 100644
--- a/ports/cortex_r4/gnu/example_build/reset.S
+++ b/ports/cortex_r4/gnu/example_build/reset.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -65,11 +65,11 @@ SWI:
.word __tx_swi_interrupt @ Software interrupt handler
PREFETCH:
.word __tx_prefetch_handler @ Prefetch exception handler
-ABORT:
+ABORT:
.word __tx_abort_handler @ Abort exception handler
-RESERVED:
+RESERVED:
.word __tx_reserved_handler @ Reserved exception handler
-IRQ:
+IRQ:
.word __tx_irq_handler @ IRQ interrupt handler
FIQ:
.word __tx_fiq_handler @ FIQ interrupt handler
diff --git a/ports/cortex_r4/gnu/example_build/sample_threadx.c b/ports/cortex_r4/gnu/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_r4/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_r4/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r4/gnu/example_build/sample_threadx.ld b/ports/cortex_r4/gnu/example_build/sample_threadx.ld
index 3dea4e1ca..e940b2b88 100644
--- a/ports/cortex_r4/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_r4/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_r4/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_r4/gnu/example_build/tx_initialize_low_level.S
index 82304d36a..1abcf7f55 100644
--- a/ports/cortex_r4/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_r4/gnu/example_build/tx_initialize_low_level.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -62,7 +62,7 @@ SYS_STACK_SIZE = 1024 @ System stack size
.type $_tx_initialize_low_level,function
$_tx_initialize_low_level:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
@@ -72,45 +72,39 @@ $_tx_initialize_low_level:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_initialize_low_level Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for any low-level processor */
-@/* initialization, including setting up interrupt vectors, setting */
-@/* up a periodic timer interrupt source, saving the system stack */
-@/* pointer for use in ISR processing later, and finding the first */
-@/* available RAM memory address for tx_application_define. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@@ -125,7 +119,7 @@ _tx_initialize_low_level:
@
LDR r1, =_sp @ Get pointer to stack area
-#ifdef TX_ENABLE_IRQ_NESTING
+#ifdef TX_ENABLE_IRQ_NESTING
@
@ /* Setup the system mode stack for nested interrupt support */
@
@@ -156,7 +150,7 @@ _tx_initialize_low_level:
MSR CPSR, r0 @ Enter SVC mode
LDR r2, =_stack_bottom @ Pickup stack bottom
CMP r3, r2 @ Compare the current stack end with the bottom
-_stack_error_loop:
+_stack_error_loop:
BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
@
@ /* Save the system stack pointer. */
@@ -208,7 +202,7 @@ __tx_reserved_handler:
B __tx_reserved_handler @ Reserved exception handler
@
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -216,17 +210,17 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -240,7 +234,7 @@ __tx_irq_processing_return:
@
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -256,28 +250,28 @@ __tx_irq_processing_return:
@__tx_example_vectored_irq_handler:
@
@
-@ /* Save initial context and call context save to prepare for
+@ /* Save initial context and call context save to prepare for
@ vectored ISR execution. */
@
@ STMDB sp!, {r0-r3} @ Save some scratch registers
@ MRS r0, SPSR @ Pickup saved SPSR
-@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ SUB lr, lr, #4 @ Adjust point of interrupt
@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
@ BL _tx_thread_vectored_context_save @ Vectored context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_start
@@ -286,7 +280,7 @@ __tx_irq_processing_return:
@ /* Application IRQ handlers can be called here! */
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_end
@@ -308,11 +302,11 @@ __tx_fiq_processing_return:
@ /* At this point execution is still in the FIQ mode. The CPSR, point of
@ interrupt, and all C scratch registers are available for use. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
@ from FIQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with FIQ interrupts enabled.
+@ system mode and returns with FIQ interrupts enabled.
@
-@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
@ prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_r4/gnu/inc/tx_port.h b/ports/cortex_r4/gnu/inc/tx_port.h
index ec22b11af..827590c95 100644
--- a/ports/cortex_r4/gnu/inc/tx_port.h
+++ b/ports/cortex_r4/gnu/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R4/GNU */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R4/GNU */
/* 6.1.12 */
/* */
/* AUTHOR */
@@ -32,27 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -65,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -78,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -114,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -129,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -177,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -189,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -209,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -221,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -249,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb__
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -310,8 +299,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R4/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R4/GNU Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r4/gnu/readme_threadx.txt b/ports/cortex_r4/gnu/readme_threadx.txt
index 06712f8a0..93d69abb4 100644
--- a/ports/cortex_r4/gnu/readme_threadx.txt
+++ b/ports/cortex_r4/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R4
+ Microsoft's Azure RTOS ThreadX for Cortex-R4
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-R4 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-R4 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R4 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
diff --git a/ports/cortex_r4/gnu/src/tx_thread_context_restore.S b/ports/cortex_r4/gnu/src/tx_thread_context_restore.S
index b56b9d83f..aab6ce05f 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -43,48 +43,42 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_restore Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the interrupt context if it is processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@@ -115,13 +109,13 @@ _tx_thread_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_r4/gnu/src/tx_thread_context_save.S b/ports/cortex_r4/gnu/src/tx_thread_context_save.S
index 1dfb9ecd7..8533f8b9b 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -30,47 +30,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_save Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@@ -86,7 +80,7 @@ _tx_thread_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable FIQ interrupts
#endif
@@ -104,7 +98,7 @@ _tx_thread_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -120,7 +114,7 @@ _tx_thread_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
__tx_thread_not_nested_save:
@ }
@@ -134,13 +128,13 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} @ Store other registers
@
@ /* Save the current stack pointer in the thread's control block. */
@@ -160,7 +154,7 @@ __tx_thread_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@ else
@@ -170,7 +164,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
@@ -185,7 +179,7 @@ __tx_thread_idle_system_save:
#endif
ADD sp, sp, #16 @ Recover saved registers
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@}
diff --git a/ports/cortex_r4/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_r4/gnu/src/tx_thread_fiq_context_restore.S
index 6e0212c93..bf7f2de3a 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -24,7 +24,7 @@
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
THUMB_MASK = 0x20 @ Thumb bit mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@@ -45,44 +45,38 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_restore Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the fiq interrupt context when processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* FIQ ISR Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_context_restore(VOID)
@@ -109,13 +103,13 @@ _tx_thread_fiq_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
@@ -203,7 +197,7 @@ __tx_thread_fiq_preempt_restore:
BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
@
@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-@ _tx_timer_time_slice = 0;
+@ _tx_timer_time_slice = 0;
@
STR r2, [r0, #24] @ Save thread's time-slice
MOV r2, #0 @ Clear value
diff --git a/ports/cortex_r4/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_r4/gnu/src/tx_thread_fiq_context_save.S
index 330bb9d55..4b3b9f4f5 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_fiq_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,43 +34,37 @@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_save Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@ VOID _tx_thread_fiq_context_save(VOID)
@@ -86,7 +80,7 @@ _tx_thread_fiq_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
CMP r2, #0 @ Is this the first interrupt?
@@ -101,7 +95,7 @@ _tx_thread_fiq_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -117,38 +111,38 @@ _tx_thread_fiq_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
__tx_thread_fiq_not_nested_save:
-@ }
+@ }
@
@ /* Otherwise, not nested, check to see if a thread was running. */
@ else if (_tx_thread_current_ptr)
-@ {
+@ {
@
ADD r2, r2, #1 @ Increment the interrupt counter
STR r2, [r3] @ Store it back in the variable
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
-@ @ scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
-@ @ need to save sl and ip since FIQ has
-@ @ copies of these registers. Nested
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
@ @ interrupt processing does need to save
@ @ these registers.
@
@ /* Save the current stack pointer in the thread's control block. */
-@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
@
@ /* Switch to the system stack. */
-@ sp = _tx_thread_system_stack_ptr;
+@ sp = _tx_thread_system_stack_ptr;
@
MOV r10, #0 @ Clear stack limit
@@ -161,7 +155,7 @@ __tx_thread_fiq_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
@ else
@@ -181,16 +175,16 @@ __tx_thread_fiq_idle_system_save:
#endif
@
@ /* Not much to do here, save the current SPSR and LR for possible
-@ use in IRQ interrupted in idle system conditions, and return to
+@ use in IRQ interrupted in idle system conditions, and return to
@ FIQ interrupt processing. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, lr} @ Store other registers that will get used
-@ @ or stripped off the stack in context
-@ @ restore
- B __tx_fiq_processing_return @ Continue FIQ processing
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
-@}
+@}
diff --git a/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_end.S
index 245752a57..8e5cd21cd 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@
@
@@ -37,51 +37,45 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_end Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-@/* processing from system mode back to FIQ mode prior to the ISR */
-@/* calling _tx_thread_fiq_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_end(VOID)
@@ -93,7 +87,7 @@ _tx_thread_fiq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_start.S
index 636007cbe..f836f639f 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,48 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_start Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-@/* processing to the system mode so nested FIQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_r4/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_r4/gnu/src/tx_thread_interrupt_control.S
index b78773a03..df05d745b 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_interrupt_control.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,7 +34,7 @@ INT_MASK = 0x03F
$_tx_thread_interrupt_control:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
@@ -44,42 +44,36 @@ $_tx_thread_interrupt_control:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_control Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for changing the interrupt lockout */
-@/* posture of the system. */
-@/* */
-@/* INPUT */
-@/* */
-@/* new_posture New interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_r4/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_r4/gnu/src/tx_thread_interrupt_disable.S
index 7e376a51b..9440f6c20 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_disable:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
@@ -41,41 +41,35 @@ $_tx_thread_interrupt_disable:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_disable Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for disabling interrupts */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)
@@ -93,7 +87,7 @@ _tx_thread_interrupt_disable:
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable IRQ and FIQ
#else
- CPSID i @ Disable IRQ
+ CPSID i @ Disable IRQ
#endif
#ifdef __THUMB_INTERWORK
diff --git a/ports/cortex_r4/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_r4/gnu/src/tx_thread_interrupt_restore.S
index 209cb6581..3728f23e3 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_restore:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
@@ -41,42 +41,36 @@ $_tx_thread_interrupt_restore:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_restore Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function is responsible for restoring interrupts to the state */
@/* returned by a previous _tx_thread_interrupt_disable call. */
-@/* */
-@/* INPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_end.S
index 84caee5b2..10a81ac00 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@
@@ -37,51 +37,45 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_end Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-@/* processing from system mode back to IRQ mode prior to the ISR */
-@/* calling _tx_thread_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_end(VOID)
@@ -93,7 +87,7 @@ _tx_thread_irq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_start.S
index 9a2b1cc3c..9a123b313 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,48 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_start Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_context_save has been called and switches the IRQ */
-@/* processing to the system mode so nested IRQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r4/gnu/src/tx_thread_schedule.S b/ports/cortex_r4/gnu/src/tx_thread_schedule.S
index 36a3ed61f..10054a492 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_schedule.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -38,7 +38,7 @@
$_tx_thread_schedule:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_schedule @ Call _tx_thread_schedule function
@@ -48,45 +48,39 @@ $_tx_thread_schedule:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_schedule Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function waits for a thread control block pointer to appear in */
-@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-@/* in the variable, the corresponding thread is resumed. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* _tx_thread_system_return Return to system from thread */
-@/* _tx_thread_context_restore Restore thread's context */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@@ -116,7 +110,7 @@ __tx_thread_schedule_loop:
@
@ }
@ while(_tx_thread_execute_ptr == TX_NULL);
-@
+@
@ /* Yes! We have a thread to execute. Lockout interrupts and
@ transfer control to it. */
@
@@ -129,7 +123,7 @@ __tx_thread_schedule_loop:
@ /* Setup the current thread pointer. */
@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
@
- LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
STR r0, [r1] @ Setup current thread pointer
@
@ /* Increment the run count for this thread. */
@@ -143,7 +137,7 @@ __tx_thread_schedule_loop:
@ /* Setup time-slice, if present. */
@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
@
- LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
@ variable
LDR sp, [r0, #8] @ Switch stack pointers
STR r3, [r2] @ Setup time-slice
diff --git a/ports/cortex_r4/gnu/src/tx_thread_stack_build.S b/ports/cortex_r4/gnu/src/tx_thread_stack_build.S
index 678e7a9bb..f57481093 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_stack_build.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@ CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interru
.type $_tx_thread_stack_build,function
$_tx_thread_stack_build:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
@@ -52,44 +52,38 @@ $_tx_thread_stack_build:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_stack_build Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function builds a stack frame on the supplied thread's stack. */
@/* The stack frame results in a fake interrupt return to the supplied */
-@/* function pointer. */
-@/* */
-@/* INPUT */
-@/* */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
@/* thread_ptr Pointer to thread control blk */
@/* function_ptr Pointer to return function */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* CALLS */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_thread_create Create thread service */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -98,10 +92,10 @@ $_tx_thread_stack_build:
.type _tx_thread_stack_build,function
_tx_thread_stack_build:
@
-@
+@
@ /* Build a fake interrupt frame. The form of the fake interrupt stack
@ on the ARM9 should look like the following after it is built:
-@
+@
@ Stack Top: 1 Interrupt stack frame type
@ CPSR Initial value for CPSR
@ a1 (r0) Initial value for a1
diff --git a/ports/cortex_r4/gnu/src/tx_thread_system_return.S b/ports/cortex_r4/gnu/src/tx_thread_system_return.S
index eee00ce6f..f8a0ee09c 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_system_return.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@
$_tx_thread_system_return:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_system_return @ Call _tx_thread_system_return function
@@ -52,44 +52,38 @@ $_tx_thread_system_return:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_system_return Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is target processor specific. It is used to transfer */
-@/* control from a thread back to the ThreadX system. Only a */
-@/* minimal context is saved since the compiler assumes temp registers */
-@/* are going to get slicked by a function call anyway. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling loop */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ThreadX components */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
@/* */
@/**************************************************************************/
@VOID _tx_thread_system_return(VOID)
@@ -124,7 +118,7 @@ _tx_skip_solicited_vfp_save:
@
MOV r0, #0 @ Build a solicited stack type
STMDB sp!, {r0-r1} @ Save type and CPSR
-@
+@
@
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@
diff --git a/ports/cortex_r4/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_r4/gnu/src/tx_thread_vectored_context_save.S
index a303ef544..1c4f07ce5 100644
--- a/ports/cortex_r4/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_r4/gnu/src/tx_thread_vectored_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -30,47 +30,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_vectored_context_save Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_vectored_context_save(VOID)
@@ -128,7 +122,7 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1, #0] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Note: Minimal context of interrupted thread is already saved. */
@@ -160,7 +154,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
diff --git a/ports/cortex_r4/gnu/src/tx_timer_interrupt.S b/ports/cortex_r4/gnu/src/tx_timer_interrupt.S
index 0b6c83817..99a1dff78 100644
--- a/ports/cortex_r4/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_r4/gnu/src/tx_timer_interrupt.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Timer */
@/** */
@@ -48,7 +48,7 @@
.type $_tx_timer_interrupt,function
$_tx_timer_interrupt:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
@@ -58,46 +58,40 @@ $_tx_timer_interrupt:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_timer_interrupt Cortex-R4/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt Cortex-R4/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function processes the hardware timer interrupt. This */
-@/* processing includes incrementing the system clock and checking for */
-@/* time slice and/or timer expiration. If either is found, the */
-@/* interrupt context save/restore functions are called along with the */
-@/* expiration functions. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_time_slice Time slice interrupted thread */
-@/* _tx_timer_expiration_process Timer expiration processing */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* interrupt vector */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@@ -122,7 +116,7 @@ _tx_timer_interrupt:
@ if (_tx_timer_time_slice)
@ {
@
- LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
LDR r2, [r3] @ Pickup time-slice
CMP r2, #0 @ Is it non-active?
BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
@@ -240,7 +234,7 @@ __tx_timer_dont_activate:
@ if (_tx_timer_expired_time_slice)
@ {
@
- LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
LDR r2, [r3] @ Pickup the actual flag
CMP r2, #0 @ See if the flag is set
BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
diff --git a/ports/cortex_r4/iar/example_build/sample_threadx.c b/ports/cortex_r4/iar/example_build/sample_threadx.c
index 983109cc2..ca92ff864 100644
--- a/ports/cortex_r4/iar/example_build/sample_threadx.c
+++ b/ports/cortex_r4/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -63,7 +63,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Enter the ThreadX kernel. */
tx_kernel_enter();
}
@@ -87,42 +87,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -130,23 +130,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -249,11 +249,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -312,7 +312,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -365,7 +365,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r4/iar/example_build/tx_initialize_low_level.s b/ports/cortex_r4/iar/example_build/tx_initialize_low_level.s
index 1b743b096..b3310a391 100644
--- a/ports/cortex_r4/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_r4/iar/example_build/tx_initialize_low_level.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Initialize */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Initialize */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -52,7 +52,7 @@ SVC_MODE DEFINE 0x13 ; SVC mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -65,45 +65,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -135,7 +129,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -183,17 +177,17 @@ IRQ_Handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -208,7 +202,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -227,22 +221,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -251,7 +245,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
diff --git a/ports/cortex_r4/iar/inc/tx_port.h b/ports/cortex_r4/iar/inc/tx_port.h
index 25abc49d6..c2950326e 100644
--- a/ports/cortex_r4/iar/inc/tx_port.h
+++ b/ports/cortex_r4/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R4/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R4/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,19 +107,19 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#define TX_INT_DISABLE 0x80 /* Disable IRQ interrupts */
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -172,7 +164,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,18 +178,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -211,11 +203,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -225,23 +217,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -269,8 +261,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -281,22 +273,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -365,8 +357,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R4/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R4/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_r4/iar/readme_threadx.txt b/ports/cortex_r4/iar/readme_threadx.txt
index 400eaa1f1..ac297f168 100644
--- a/ports/cortex_r4/iar/readme_threadx.txt
+++ b/ports/cortex_r4/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R4
+ Microsoft's Azure RTOS ThreadX for Cortex-R4
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-R4 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-R4 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-R4 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-R4 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,159 +92,159 @@ The following are conditional compilation options for building the ThreadX libra
and application:
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R4
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R4 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -255,12 +255,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -268,7 +268,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -281,7 +281,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -292,12 +292,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -314,24 +314,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -339,15 +339,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -355,7 +355,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -366,12 +366,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of a thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-R4 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of a thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -383,21 +383,21 @@ cannot be disabled. The hardware does not support nested FIQ interrupts.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-R4 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-R4 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
diff --git a/ports/cortex_r4/iar/src/tx_iar.c b/ports/cortex_r4/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_r4/iar/src/tx_iar.c
+++ b/ports/cortex_r4/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_r4/iar/src/tx_thread_context_restore.s b/ports/cortex_r4/iar/src/tx_thread_context_restore.s
index 1b51ccdc2..7f7d414a7 100644
--- a/ports/cortex_r4/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_r4/iar/src/tx_thread_context_restore.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -47,44 +47,38 @@ THUMB_MASK DEFINE 0x20 ; Thumb bit mask
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -112,13 +106,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -181,7 +175,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
@@ -191,7 +185,7 @@ __tx_thread_preempt_restore
VSTMDB sp!, {D0-D15} ; Save D0-D15
_tx_skip_irq_vfp_save
#endif
-
+
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
@@ -237,7 +231,7 @@ __tx_thread_idle_system_restore
; /* Just return back to the scheduler! */
;
CPS #SVC_MODE ; Enter SVC mode
-
+
B _tx_thread_schedule ; Return to scheduler
;}
;
diff --git a/ports/cortex_r4/iar/src/tx_thread_context_save.s b/ports/cortex_r4/iar/src/tx_thread_context_save.s
index 9c01112d7..6ce8cd84a 100644
--- a/ports/cortex_r4/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_r4/iar/src/tx_thread_context_save.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -36,43 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -89,7 +83,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -104,7 +98,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -120,7 +114,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -134,13 +128,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -160,7 +154,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -170,7 +164,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -185,7 +179,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_r4/iar/src/tx_thread_interrupt_control.s b/ports/cortex_r4/iar/src/tx_thread_interrupt_control.s
index 44561789b..ece9c9a92 100644
--- a/ports/cortex_r4/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_r4/iar/src/tx_thread_interrupt_control.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -32,42 +32,36 @@
INT_MASK DEFINE 0x80 ; Interrupt bit mask
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
@@ -87,7 +81,7 @@ _tx_thread_interrupt_control
;
MSR CPSR_cxsf, r1 ; Setup new CPSR
AND r0, r3, #INT_MASK ; Return previous interrupt mask
-
+
BX lr ; Return to caller
;
;}
diff --git a/ports/cortex_r4/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_r4/iar/src/tx_thread_interrupt_disable.s
index cc071a5b4..bb1627492 100644
--- a/ports/cortex_r4/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_r4/iar/src/tx_thread_interrupt_disable.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -32,41 +32,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_r4/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_r4/iar/src/tx_thread_interrupt_restore.s
index a2bc55067..b96ebe469 100644
--- a/ports/cortex_r4/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_r4/iar/src/tx_thread_interrupt_restore.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for restoring interrupts to the state */
-;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for restoring interrupts to the state */
+;/* returned by a previous _tx_thread_interrupt_disable call. */
+;/* */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r4/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_r4/iar/src/tx_thread_irq_nesting_end.s
index 42b1deae7..cf06f9b01 100644
--- a/ports/cortex_r4/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_r4/iar/src/tx_thread_irq_nesting_end.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,51 +33,45 @@
IRQ_MODE DEFINE 0x12 ; IRQ mode
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_r4/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_r4/iar/src/tx_thread_irq_nesting_start.s
index 83fbbd17e..1a7c99d26 100644
--- a/ports/cortex_r4/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_r4/iar/src/tx_thread_irq_nesting_start.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,48 +33,42 @@
SYS_MODE DEFINE 0x1F ; System mode
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r4/iar/src/tx_thread_schedule.s b/ports/cortex_r4/iar/src/tx_thread_schedule.s
index 42be14905..dd548e46a 100644
--- a/ports/cortex_r4/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_r4/iar/src/tx_thread_schedule.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -37,45 +37,39 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -104,7 +98,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -113,7 +107,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -127,7 +121,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -184,7 +178,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
CPSID i ; Disable IRQ interrupts
@@ -200,7 +194,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
CPSID i ; Disable IRQ interrupts
diff --git a/ports/cortex_r4/iar/src/tx_thread_stack_build.s b/ports/cortex_r4/iar/src/tx_thread_stack_build.s
index bbb868488..7a95aeb7e 100644
--- a/ports/cortex_r4/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_r4/iar/src/tx_thread_stack_build.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,58 +33,52 @@ SVC_MODE DEFINE 0x13 ; SVC mode
CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints enabled
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function builds a stack frame on the supplied thread's stack. */
-;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
-;/* thread_ptr Pointer to thread control blk */
-;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function builds a stack frame on the supplied thread's stack. */
+;/* The stack frame results in a fake interrupt return to the supplied */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
+;/* thread_ptr Pointer to thread control blk */
+;/* function_ptr Pointer to return function */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
ARM
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-R4 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_r4/iar/src/tx_thread_system_return.s b/ports/cortex_r4/iar/src/tx_thread_system_return.s
index a8c755fab..89a42df41 100644
--- a/ports/cortex_r4/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_r4/iar/src/tx_thread_system_return.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -37,44 +37,38 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -107,7 +101,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
;
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
diff --git a/ports/cortex_r4/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_r4/iar/src/tx_thread_vectored_context_save.s
index aa24d6c35..91fb156e2 100644
--- a/ports/cortex_r4/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_r4/iar/src/tx_thread_vectored_context_save.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -35,43 +35,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -128,7 +122,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -160,7 +154,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_r4/iar/src/tx_timer_interrupt.s b/ports/cortex_r4/iar/src/tx_timer_interrupt.s
index 896c5525f..c17b011d3 100644
--- a/ports/cortex_r4/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_r4/iar/src/tx_timer_interrupt.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Timer */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Timer */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-R4/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-R4/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_r5/ac5/example_build/sample_threadx.c b/ports/cortex_r5/ac5/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_r5/ac5/example_build/sample_threadx.c
+++ b/ports/cortex_r5/ac5/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r5/ac5/example_build/tx_initialize_low_level.s b/ports/cortex_r5/ac5/example_build/tx_initialize_low_level.s
index 0ae740094..a403c04a0 100644
--- a/ports/cortex_r5/ac5/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_r5/ac5/example_build/tx_initialize_low_level.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Initialize */
;/** */
@@ -90,45 +90,39 @@ __vectors
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -179,7 +173,7 @@ _tx_initialize_low_level
; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
;
LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
- LDR r0, [r1, #0] ; Pickup system stack
+ LDR r0, [r1, #0] ; Pickup system stack
ADD r0, r0, #4 ; Increment to next free word
;
; /* Save the first available memory address. */
@@ -201,7 +195,7 @@ _tx_initialize_low_level
;
;
;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
-; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
; (optionally SYS) stack areas. */
;
EXPORT __user_initial_stackheap
@@ -253,7 +247,7 @@ __tx_reserved_handler
;
;
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -261,21 +255,21 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
BL _tx_timer_interrupt ; Timer interrupt handler
_tx_not_timer_interrupt
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -285,7 +279,7 @@ _tx_not_timer_interrupt
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
IF :DEF:TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -301,28 +295,28 @@ _tx_not_timer_interrupt
__tx_example_vectored_irq_handler
;
;
-; /* Save initial context and call context save to prepare for
+; /* Save initial context and call context save to prepare for
; vectored ISR execution. */
;
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
; BL _tx_thread_vectored_context_save ; Vectored context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -331,7 +325,7 @@ __tx_example_vectored_irq_handler
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
; IF :DEF:TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
@@ -353,11 +347,11 @@ __tx_fiq_processing_return
; /* At this point execution is still in the FIQ mode. The CPSR, point of
; interrupt, and all C scratch registers are available for use. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
; from FIQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with FIQ interrupts enabled.
+; system mode and returns with FIQ interrupts enabled.
;
-; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
; prior to enabling nested FIQ interrupts. */
IF :DEF:TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_r5/ac5/inc/tx_port.h b/ports/cortex_r5/ac5/inc/tx_port.h
index 881d58723..aa188c5cb 100644
--- a/ports/cortex_r5/ac5/inc/tx_port.h
+++ b/ports/cortex_r5/ac5/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R5/AC5 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R5/AC5 */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -75,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -111,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -126,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -174,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -206,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -218,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -246,21 +238,21 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef __thumb
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (ULONG) __clz((unsigned int) m); \
- b = 31 - b;
+ b = 31 - b;
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -280,7 +272,7 @@ typedef unsigned short USHORT;
{ \
__enable_irq(); \
__enable_fiq(); \
- }
+ }
#else
@@ -289,7 +281,7 @@ typedef unsigned short USHORT;
#define TX_RESTORE if (!interrupt_save_disabled) \
{ \
__enable_irq(); \
- }
+ }
#endif
#else
@@ -318,8 +310,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R5/AC5 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R5/AC5 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r5/ac5/readme_threadx.txt b/ports/cortex_r5/ac5/readme_threadx.txt
index 9910f87e6..0df144e2a 100644
--- a/ports/cortex_r5/ac5/readme_threadx.txt
+++ b/ports/cortex_r5/ac5/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R5
+ Microsoft's Azure RTOS ThreadX for Cortex-R5
Thumb & 32-bit Mode
@@ -6,21 +6,21 @@
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the ARM
-AC5 development environment. At this point you may run the build_threadx.bat
-batch file. This will build the ThreadX run-time environment in the
-"example_build" directory.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
1.1 Building with Project Files
-The ThreadX library can also be built via project files. Simply open
-the tx.mcp file with project builder and select make. This will place
+The ThreadX library can also be built via project files. Simply open
+the tx.mcp file with project builder and select make. This will place
the tx.a library file into the Debug sub-directory.
@@ -29,45 +29,45 @@ the tx.a library file into the Debug sub-directory.
The ThreadX demonstration is designed to execute under the ARM
Windows-based simulator.
-Building the demonstration is easy; simply execute the build_threadx_demo.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_demo.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file sample_threadx.axf
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
is a binary file that can be downloaded and executed on the ARM simulator.
2.0.1 Building with Project Files
-The ThreadX demonstration can also be built via project files. Simply open
-the sample_threadx.mcp file with project builder and select make. This will place
+The ThreadX demonstration can also be built via project files. Simply open
+the sample_threadx.mcp file with project builder and select make. This will place
the sample_threadx.axf output image into the Debug sub-directory.
3. System Initialization
-The entry point in ThreadX for the Cortex-R5 using AC5 tools is at label
-__main. This is defined within the AC5 compiler's startup code. In
-addition, this is where all static and global pre-set C variable
+The entry point in ThreadX for the Cortex-R5 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In
+addition, this is where all static and global pre-set C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, the vector area, and a periodic timer interrupt
-source. By default, the vector area is defined to be located in the Init area,
-which is defined at the top of tx_initialize_low_level.s. This area is typically
-located at 0. In situations where this is impossible, the vectors at the beginning
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
of the Init area should be copied to address 0.
This is also where initialization of a periodic timer interrupt source
should take place.
-In addition, _tx_initialize_low_level determines the first available
-address for use by the application, which is supplied as the sole input
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
parameter to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler Switch Meaning
@@ -83,10 +83,10 @@ Linker Switch Meaning
-o demo.axf Specifies demo output file name
--elf Specifies elf output file format
--ro Specifies that Read-Only memory starts at address 0
- --first tx_initialize_low_level.o(Init)
+ --first tx_initialize_low_level.o(Init)
Specifies that the first area loaded is Init
--remove Remove unused areas
- --list Specifies map file name
+ --list Specifies map file name
--symbols Specifies symbols for map file
--map Creates a map file
@@ -97,161 +97,161 @@ Application Defines
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
--PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
--PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s. In addition,
IRQ nesting should also be enabled.
-DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
-DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
-DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -269,39 +269,39 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the build_threadx.bat file to
-remove the -g option and enable all compiler optimizations.
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R5 vectors start at address zero. The demonstration system startup
-Init area contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -312,12 +312,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -325,7 +325,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -338,7 +338,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
EXPORT __tx_irq_example_handler
@@ -348,12 +348,12 @@ __tx_irq_example_handler
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -370,22 +370,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
calling the _tx_thread_irq_nesting_end service disables nesting by disabling
-IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
EXPORT __tx_irq_handler
- EXPORT __tx_irq_processing_return
+ EXPORT __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -393,10 +393,10 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* Enable nested IRQ interrupts. NOTE: Since this service returns
-; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-;
+;
; /* Application ISR call(s) go here! */
;
; /* Disable nested IRQ interrupts. The mode is switched back to
@@ -409,12 +409,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-R5 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-R5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -423,7 +423,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.s.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.s:
@@ -451,18 +451,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -478,7 +478,7 @@ __tx_fiq_processing_return
; interrupt, and all C scratch registers are available for use. */
;
; /* Enable nested FIQ interrupts. NOTE: Since this service returns
-; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
; cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
;
@@ -494,22 +494,22 @@ __tx_fiq_processing_return
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.s in the Integrator sub-directories.
9. Thumb/Cortex-R5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
-ThreadX file and/or the application in Thumb mode. If any Thumb code
-is used the entire ThreadX source- both C and assembly - should be built
+By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
with the "-apcs /interwork" option.
diff --git a/ports/cortex_r5/ac5/src/tx_thread_context_restore.s b/ports/cortex_r5/ac5/src/tx_thread_context_restore.s
index 15fbb1e92..1d070d89c 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_context_restore.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -54,44 +54,38 @@ SVC_MODE EQU 0x93 ; SVC mode
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3, #0] ; Store the counter
+ STR r2, [r3, #0] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -193,7 +187,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
IF {TARGET_FPU_VFP} = {TRUE}
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
diff --git a/ports/cortex_r5/ac5/src/tx_thread_context_save.s b/ports/cortex_r5/ac5/src/tx_thread_context_save.s
index 9d1b2d147..043fbdeb4 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_context_save.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable FIQ interrupts
ENDIF
@@ -108,7 +102,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -124,7 +118,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -138,13 +132,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -164,7 +158,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -174,7 +168,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -189,7 +183,7 @@ __tx_thread_idle_system_save
ENDIF
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_r5/ac5/src/tx_thread_fiq_context_restore.s b/ports/cortex_r5/ac5/src/tx_thread_fiq_context_restore.s
index 65a4be5ab..f58456b99 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_fiq_context_restore.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_fiq_context_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -32,7 +32,7 @@
;
SVC_MODE EQU 0xD3 ; SVC mode
FIQ_MODE EQU 0xD1 ; FIQ mode
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
@@ -50,44 +50,38 @@ IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_restore Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the fiq interrupt context when processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* FIQ ISR Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_context_restore(VOID)
@@ -113,13 +107,13 @@ _tx_thread_fiq_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -163,7 +157,7 @@ __tx_thread_fiq_no_preempt_restore
; /* Restore interrupted thread or ISR. */
;
; /* Pickup the saved stack pointer. */
-; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
;
; /* Recover the saved context and return to the point of interrupt. */
;
@@ -195,7 +189,7 @@ __tx_thread_fiq_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
STR sp, [r0, #8] ; Save stack pointer in thread control
- ; block
+ ; block
;
; /* Save the remaining time-slice and disable it. */
; if (_tx_timer_time_slice)
@@ -207,7 +201,7 @@ __tx_thread_fiq_preempt_restore
BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
;
; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-; _tx_timer_time_slice = 0;
+; _tx_timer_time_slice = 0;
;
STR r2, [r0, #24] ; Save thread's time-slice
MOV r2, #0 ; Clear value
diff --git a/ports/cortex_r5/ac5/src/tx_thread_fiq_context_save.s b/ports/cortex_r5/ac5/src/tx_thread_fiq_context_save.s
index bc99650a9..67bc6290f 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_fiq_context_save.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_fiq_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -39,43 +39,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_context_save Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
; VOID _tx_thread_fiq_context_save(VOID)
@@ -90,7 +84,7 @@ _tx_thread_fiq_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -105,7 +99,7 @@ _tx_thread_fiq_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -121,38 +115,38 @@ _tx_thread_fiq_context_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
__tx_thread_fiq_not_nested_save
-; }
+; }
;
; /* Otherwise, not nested, check to see if a thread was running. */
; else if (_tx_thread_current_ptr)
-; {
+; {
;
ADD r2, r2, #1 ; Increment the interrupt counter
STR r2, [r3] ; Store it back in the variable
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
-; ; scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
-; ; need to save sl and ip since FIQ has
-; ; copies of these registers. Nested
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
; ; interrupt processing does need to save
; ; these registers.
;
; /* Save the current stack pointer in the thread's control block. */
-; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
;
; /* Switch to the system stack. */
-; sp = _tx_thread_system_stack_ptr;
+; sp = _tx_thread_system_stack_ptr;
;
MOV r10, #0 ; Clear stack limit
@@ -165,7 +159,7 @@ __tx_thread_fiq_not_nested_save
POP {lr} ; Recover ISR lr
ENDIF
- B __tx_fiq_processing_return ; Continue FIQ processing
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
; else
@@ -185,18 +179,18 @@ __tx_thread_fiq_idle_system_save
ENDIF
;
; /* Not much to do here, save the current SPSR and LR for possible
-; use in IRQ interrupted in idle system conditions, and return to
+; use in IRQ interrupted in idle system conditions, and return to
; FIQ interrupt processing. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, lr} ; Store other registers that will get used
-; ; or stripped off the stack in context
-; ; restore
- B __tx_fiq_processing_return ; Continue FIQ processing
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
;
; }
-;}
+;}
;
END
diff --git a/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_end.s b/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_end.s
index 89e58b508..091737b63 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_end.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_end Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-;/* processing from system mode back to FIQ mode prior to the ISR */
-;/* calling _tx_thread_fiq_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_fiq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_start.s b/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_start.s
index 224966a70..d4b870ac1 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_start.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_fiq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_fiq_nesting_start Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from FIQ mode after */
-;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-;/* processing to the system mode so nested FIQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with FIQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_r5/ac5/src/tx_thread_interrupt_control.s b/ports/cortex_r5/ac5/src/tx_thread_interrupt_control.s
index 2a3698d7b..97dbf4f74 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_interrupt_control.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -36,42 +36,36 @@ INT_MASK EQU 0x80 ; Interrupt bit mask
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_r5/ac5/src/tx_thread_interrupt_disable.s b/ports/cortex_r5/ac5/src/tx_thread_interrupt_disable.s
index 7af79f591..bf80f9860 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_interrupt_disable.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,41 +29,35 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(void)
@@ -80,7 +74,7 @@ _tx_thread_interrupt_disable
IF :DEF:TX_ENABLE_FIQ_SUPPORT
CPSID if ; Disable IRQ and FIQ
ELSE
- CPSID i ; Disable IRQ
+ CPSID i ; Disable IRQ
ENDIF
IF {INTER} = {TRUE}
diff --git a/ports/cortex_r5/ac5/src/tx_thread_interrupt_restore.s b/ports/cortex_r5/ac5/src/tx_thread_interrupt_restore.s
index 61ebae01e..9e1bafaf9 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_interrupt_restore.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -29,42 +29,36 @@
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function is responsible for restoring interrupts to the state */
;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_end.s b/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_end.s
index 5b85a17fd..00f1f123b 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_end.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -34,56 +34,50 @@ DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
ELSE
DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
ENDIF
-MODE_MASK EQU 0x1F ; Mode mask
+MODE_MASK EQU 0x1F ; Mode mask
IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
@@ -94,7 +88,7 @@ _tx_thread_irq_nesting_end
MRS r0, CPSR ; Pickup the CPSR
ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
MSR CPSR_c, r0 ; Disable interrupts
- LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
; 8-byte alignment logic)
BIC r0, r0, #MODE_MASK ; Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
diff --git a/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_start.s b/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_start.s
index f46318ae7..819449ccf 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_irq_nesting_start.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -35,48 +35,42 @@ SYS_MODE_BITS EQU 0x1F ; System mode bits
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r5/ac5/src/tx_thread_schedule.s b/ports/cortex_r5/ac5/src/tx_thread_schedule.s
index 0144fb47a..b50d0614b 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_schedule.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_schedule.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -40,45 +40,39 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -107,7 +101,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -120,7 +114,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -134,7 +128,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
diff --git a/ports/cortex_r5/ac5/src/tx_thread_stack_build.s b/ports/cortex_r5/ac5/src/tx_thread_stack_build.s
index af6a36575..899e6ade8 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_stack_build.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_stack_build.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -41,44 +41,38 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
;
;
AREA ||.text||, CODE, READONLY
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
+;/* */
;/* This function builds a stack frame on the supplied thread's stack. */
;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
;/* thread_ptr Pointer to thread control blk */
;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
+;/* */
+;/* OUTPUT */
+;/* */
;/* None */
-;/* */
-;/* CALLS */
-;/* */
+;/* */
+;/* CALLS */
+;/* */
;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -86,10 +80,10 @@ THUMB_BIT EQU 0x20 ; Thumb-bit
EXPORT _tx_thread_stack_build
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-R5 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_r5/ac5/src/tx_thread_system_return.s b/ports/cortex_r5/ac5/src/tx_thread_system_return.s
index 69ed81f1d..ac35c95f5 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_system_return.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_system_return.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -33,50 +33,44 @@
IMPORT _tx_timer_time_slice
IMPORT _tx_thread_schedule
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
- IMPORT _tx_execution_thread_exit
+ IMPORT _tx_execution_thread_exit
ENDIF
;
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -110,7 +104,7 @@ _tx_skip_solicited_vfp_save
MOV r0, #0 ; Build a solicited stack type
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
;
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
diff --git a/ports/cortex_r5/ac5/src/tx_thread_vectored_context_save.s b/ports/cortex_r5/ac5/src/tx_thread_vectored_context_save.s
index c1dad6a9e..b1918801a 100644
--- a/ports/cortex_r5/ac5/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_r5/ac5/src/tx_thread_vectored_context_save.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Thread */
;/** */
@@ -38,43 +38,37 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -107,7 +101,7 @@ _tx_thread_vectored_context_save
; /* Return to the ISR. */
;
MOV r10, #0 ; Clear stack limit
-
+
IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
; /* Call the ISR enter function to indicate an ISR is executing. */
@@ -135,7 +129,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -171,7 +165,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_r5/ac5/src/tx_timer_interrupt.s b/ports/cortex_r5/ac5/src/tx_timer_interrupt.s
index f2408e306..89bc535ca 100644
--- a/ports/cortex_r5/ac5/src/tx_timer_interrupt.s
+++ b/ports/cortex_r5/ac5/src/tx_timer_interrupt.s
@@ -1,18 +1,18 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
;/**************************************************************************/
;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
+;/** */
+;/** ThreadX Component */
;/** */
;/** Timer */
;/** */
@@ -44,46 +44,40 @@
;
AREA ||.text||, CODE, READONLY
PRESERVE8
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-R5/AC5 */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-R5/AC5 */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -107,7 +101,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -225,13 +219,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_r5/ac6/example_build/sample_threadx/.cproject b/ports/cortex_r5/ac6/example_build/sample_threadx/.cproject
index bcac3d159..01a0335e2 100644
--- a/ports/cortex_r5/ac6/example_build/sample_threadx/.cproject
+++ b/ports/cortex_r5/ac6/example_build/sample_threadx/.cproject
@@ -1,170 +1,170 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.c b/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.c
+++ b/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.scat b/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.scat
index c13f39f80..4b7265d37 100644
--- a/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.scat
+++ b/ports/cortex_r5/ac6/example_build/sample_threadx/sample_threadx.scat
@@ -1,7 +1,7 @@
;*******************************************************
; Copyright (c) 2011-2017 Arm Limited (or its affiliates). All rights reserved.
; Use, modification and redistribution of this file is subject to your possession of a
-; valid End User License Agreement for the Arm Product of which these examples are part of
+; valid End User License Agreement for the Arm Product of which these examples are part of
; and your compliance with all applicable terms and conditions of such licence agreement.
;*******************************************************
diff --git a/ports/cortex_r5/ac6/example_build/sample_threadx/startup.S b/ports/cortex_r5/ac6/example_build/sample_threadx/startup.S
index 584f08a1f..e67cfc986 100644
--- a/ports/cortex_r5/ac6/example_build/sample_threadx/startup.S
+++ b/ports/cortex_r5/ac6/example_build/sample_threadx/startup.S
@@ -3,7 +3,7 @@
//
// Copyright (c) 2006-2018 Arm Limited (or its affiliates). All rights reserved.
// Use, modification and redistribution of this file is subject to your possession of a
-// valid End User License Agreement for the Arm Product of which these examples are part of
+// valid End User License Agreement for the Arm Product of which these examples are part of
// and your compliance with all applicable terms and conditions of such licence agreement.
//----------------------------------------------------------------
@@ -310,7 +310,7 @@ regions_done:
// Enable Branch prediction
//----------------------------------------------------------------
-// In the Cortex-R5, the Z-bit of the SCTLR does not control the program flow prediction.
+// In the Cortex-R5, the Z-bit of the SCTLR does not control the program flow prediction.
// Some control bits in the ACTLR control the program flow and prefetch features instead.
// These are enabled by default, but are shown here for completeness.
diff --git a/ports/cortex_r5/ac6/example_build/sample_threadx/tx_initialize_low_level.S b/ports/cortex_r5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
index 1f80ff968..3913a0cb2 100644
--- a/ports/cortex_r5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
+++ b/ports/cortex_r5/ac6/example_build/sample_threadx/tx_initialize_low_level.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -59,7 +59,7 @@ SYS_STACK_SIZE = 1024 @ System stack size
.type $_tx_initialize_low_level,function
$_tx_initialize_low_level:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
@@ -69,45 +69,39 @@ $_tx_initialize_low_level:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_initialize_low_level Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for any low-level processor */
-@/* initialization, including setting up interrupt vectors, setting */
-@/* up a periodic timer interrupt source, saving the system stack */
-@/* pointer for use in ISR processing later, and finding the first */
-@/* available RAM memory address for tx_application_define. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@@ -122,7 +116,7 @@ _tx_initialize_low_level:
@
LDR r1, =Image$$ARM_LIB_STACKHEAP$$ZI$$Limit @ Get pointer to stack area
-#ifdef TX_ENABLE_IRQ_NESTING
+#ifdef TX_ENABLE_IRQ_NESTING
@
@ /* Setup the system mode stack for nested interrupt support */
@
@@ -153,7 +147,7 @@ _tx_initialize_low_level:
MSR CPSR, r0 @ Enter SVC mode
LDR r2, =Image$$ARM_LIB_STACKHEAP$$Base @ Pickup stack bottom
CMP r3, r2 @ Compare the current stack end with the bottom
-_stack_error_loop:
+_stack_error_loop:
BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
@
@ /* Save the system stack pointer. */
@@ -214,17 +208,17 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -238,7 +232,7 @@ __tx_irq_processing_return:
@
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -254,28 +248,28 @@ __tx_irq_processing_return:
@__tx_example_vectored_irq_handler:
@
@
-@ /* Save initial context and call context save to prepare for
+@ /* Save initial context and call context save to prepare for
@ vectored ISR execution. */
@
@ STMDB sp!, {r0-r3} @ Save some scratch registers
@ MRS r0, SPSR @ Pickup saved SPSR
-@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ SUB lr, lr, #4 @ Adjust point of interrupt
@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
@ BL _tx_thread_vectored_context_save @ Vectored context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_start
@@ -284,7 +278,7 @@ __tx_irq_processing_return:
@ /* Application IRQ handlers can be called here! */
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_end
@@ -306,11 +300,11 @@ __tx_fiq_processing_return:
@ /* At this point execution is still in the FIQ mode. The CPSR, point of
@ interrupt, and all C scratch registers are available for use. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
@ from FIQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with FIQ interrupts enabled.
+@ system mode and returns with FIQ interrupts enabled.
@
-@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
@ prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_r5/ac6/example_build/tx/.cproject b/ports/cortex_r5/ac6/example_build/tx/.cproject
index aa051b97a..63d5638f5 100644
--- a/ports/cortex_r5/ac6/example_build/tx/.cproject
+++ b/ports/cortex_r5/ac6/example_build/tx/.cproject
@@ -1,150 +1,150 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ports/cortex_r5/ac6/inc/tx_port.h b/ports/cortex_r5/ac6/inc/tx_port.h
index 06f1f80ae..360e31784 100644
--- a/ports/cortex_r5/ac6/inc/tx_port.h
+++ b/ports/cortex_r5/ac6/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R5/AC6 */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R5/AC6 */
/* 6.1.12 */
/* */
/* AUTHOR */
@@ -32,27 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -65,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -78,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -114,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -129,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -177,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -189,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -209,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -221,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -249,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb__
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -310,8 +299,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R5/AC6 Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R5/AC6 Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r5/ac6/readme_threadx.txt b/ports/cortex_r5/ac6/readme_threadx.txt
index f2b1b0a41..1efd85af3 100644
--- a/ports/cortex_r5/ac6/readme_threadx.txt
+++ b/ports/cortex_r5/ac6/readme_threadx.txt
@@ -1,18 +1,18 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R5
+ Microsoft's Azure RTOS ThreadX for Cortex-R5
Using ARM Compiler 6 & DS
1. Import the ThreadX Projects
-In order to build the ThreadX library and the ThreadX demonstration, first import
-the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
+In order to build the ThreadX library and the ThreadX demonstration, first import
+the 'tx' and 'sample_threadx' projects (located in the "example_build" directory)
into your DS workspace.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply right-click the Eclipse project
-"tx" and then select the "Build Project" button. You should now observe the compilation
+Building the ThreadX library is easy; simply right-click the Eclipse project
+"tx" and then select the "Build Project" button. You should now observe the compilation
and assembly of the ThreadX library. This project build produces the ThreadX
library file tx.a.
@@ -22,44 +22,44 @@ library file tx.a.
The ThreadX demonstration is designed to execute under the DS debugger on the
VE_Cortex-R5 Bare Metal simulator.
-Building the demonstration is easy; simply right-click the Eclipse project
-"sample_threadx" and then select the "Build Project" button. You should now observe
-the compilation and assembly of the ThreadX demonstration. This project build produces
-the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
+Building the demonstration is easy; simply right-click the Eclipse project
+"sample_threadx" and then select the "Build Project" button. You should now observe
+the compilation and assembly of the ThreadX demonstration. This project build produces
+the ThreadX library file sample_threadx.axf. Next, expand the demo ThreadX project folder
in the Project Explorer window, right-click on the 'cortex-r5_tx.launch' file, click
'Debug As', and then click 'cortex-r5_tx' from the submenu. This will cause the
-debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
+debugger to load the sample_threadx.axf ELF file and run to main. You are now ready
to execute the ThreadX demonstration.
4. System Initialization
-The entry point in ThreadX for the Cortex-R5 using ARM tools is at label
-"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
-this is where all static and global pre-set C variable initialization processing
+The entry point in ThreadX for the Cortex-R5 using ARM tools is at label
+"Vectors". This is defined within startup.S in the sample_threadx project. In addition,
+this is where all static and global pre-set C variable initialization processing
takes place.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
5. Register Usage and Stack Frames
-The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The AC6 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -77,52 +77,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R5 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -130,7 +130,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -143,7 +143,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -153,12 +153,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -175,22 +175,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -198,10 +198,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -214,12 +214,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -228,7 +228,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -256,18 +256,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -283,7 +283,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -299,12 +299,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
diff --git a/ports/cortex_r5/ac6/src/tx_thread_context_restore.S b/ports/cortex_r5/ac6/src/tx_thread_context_restore.S
index 198d4ad1d..da9ae44fb 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_context_restore.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -49,48 +49,42 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_restore Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the interrupt context if it is processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@@ -121,13 +115,13 @@ _tx_thread_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_r5/ac6/src/tx_thread_context_save.S b/ports/cortex_r5/ac6/src/tx_thread_context_save.S
index 26440a927..f0324d69f 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_context_save.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -37,47 +37,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_save Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@@ -93,7 +87,7 @@ _tx_thread_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable FIQ interrupts
#endif
@@ -111,7 +105,7 @@ _tx_thread_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -127,7 +121,7 @@ _tx_thread_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
__tx_thread_not_nested_save:
@ }
@@ -141,13 +135,13 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} @ Store other registers
@
@ /* Save the current stack pointer in the thread's control block. */
@@ -167,7 +161,7 @@ __tx_thread_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@ else
@@ -177,7 +171,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
@@ -192,7 +186,7 @@ __tx_thread_idle_system_save:
#endif
ADD sp, sp, #16 @ Recover saved registers
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@}
diff --git a/ports/cortex_r5/ac6/src/tx_thread_fiq_context_restore.S b/ports/cortex_r5/ac6/src/tx_thread_fiq_context_restore.S
index 8a46e22c3..51fe146b3 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_fiq_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -32,7 +32,7 @@
@
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
THUMB_MASK = 0x20 @ Thumb bit mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@@ -52,44 +52,38 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_restore Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the fiq interrupt context when processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* FIQ ISR Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_context_restore(VOID)
@@ -116,13 +110,13 @@ _tx_thread_fiq_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
@@ -210,7 +204,7 @@ __tx_thread_fiq_preempt_restore:
BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
@
@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-@ _tx_timer_time_slice = 0;
+@ _tx_timer_time_slice = 0;
@
STR r2, [r0, #24] @ Save thread's time-slice
MOV r2, #0 @ Clear value
diff --git a/ports/cortex_r5/ac6/src/tx_thread_fiq_context_save.S b/ports/cortex_r5/ac6/src/tx_thread_fiq_context_save.S
index a898aa078..153037406 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_fiq_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -40,43 +40,37 @@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_save Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@ VOID _tx_thread_fiq_context_save(VOID)
@@ -92,7 +86,7 @@ _tx_thread_fiq_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
CMP r2, #0 @ Is this the first interrupt?
@@ -107,7 +101,7 @@ _tx_thread_fiq_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -123,38 +117,38 @@ _tx_thread_fiq_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
__tx_thread_fiq_not_nested_save:
-@ }
+@ }
@
@ /* Otherwise, not nested, check to see if a thread was running. */
@ else if (_tx_thread_current_ptr)
-@ {
+@ {
@
ADD r2, r2, #1 @ Increment the interrupt counter
STR r2, [r3] @ Store it back in the variable
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
-@ @ scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
-@ @ need to save sl and ip since FIQ has
-@ @ copies of these registers. Nested
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
@ @ interrupt processing does need to save
@ @ these registers.
@
@ /* Save the current stack pointer in the thread's control block. */
-@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
@
@ /* Switch to the system stack. */
-@ sp = _tx_thread_system_stack_ptr;
+@ sp = _tx_thread_system_stack_ptr;
@
MOV r10, #0 @ Clear stack limit
@@ -167,7 +161,7 @@ __tx_thread_fiq_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
@ else
@@ -187,16 +181,16 @@ __tx_thread_fiq_idle_system_save:
#endif
@
@ /* Not much to do here, save the current SPSR and LR for possible
-@ use in IRQ interrupted in idle system conditions, and return to
+@ use in IRQ interrupted in idle system conditions, and return to
@ FIQ interrupt processing. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, lr} @ Store other registers that will get used
-@ @ or stripped off the stack in context
-@ @ restore
- B __tx_fiq_processing_return @ Continue FIQ processing
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
-@}
+@}
diff --git a/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_end.S b/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_end.S
index d9d3d30ba..9d61bf40e 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,7 +34,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@
@
@@ -44,51 +44,45 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_end Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-@/* processing from system mode back to FIQ mode prior to the ISR */
-@/* calling _tx_thread_fiq_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_end(VOID)
@@ -100,7 +94,7 @@ _tx_thread_fiq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_start.S b/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_start.S
index c3045e8ce..54d16410b 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_fiq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -40,48 +40,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_start Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-@/* processing to the system mode so nested FIQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_r5/ac6/src/tx_thread_interrupt_control.S b/ports/cortex_r5/ac6/src/tx_thread_interrupt_control.S
index e73e4d7cc..f99412f24 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_interrupt_control.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -40,7 +40,7 @@ INT_MASK = 0x03F
$_tx_thread_interrupt_control:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
@@ -50,42 +50,36 @@ $_tx_thread_interrupt_control:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_control Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for changing the interrupt lockout */
-@/* posture of the system. */
-@/* */
-@/* INPUT */
-@/* */
-@/* new_posture New interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_r5/ac6/src/tx_thread_interrupt_disable.S b/ports/cortex_r5/ac6/src/tx_thread_interrupt_disable.S
index 688d243d9..1c52ec6fa 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -37,7 +37,7 @@
$_tx_thread_interrupt_disable:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
@@ -47,41 +47,35 @@ $_tx_thread_interrupt_disable:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_disable Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for disabling interrupts */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)
@@ -99,7 +93,7 @@ _tx_thread_interrupt_disable:
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable IRQ and FIQ
#else
- CPSID i @ Disable IRQ
+ CPSID i @ Disable IRQ
#endif
#ifdef __THUMB_INTERWORK
diff --git a/ports/cortex_r5/ac6/src/tx_thread_interrupt_restore.S b/ports/cortex_r5/ac6/src/tx_thread_interrupt_restore.S
index 7872802bd..6824ceee3 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -37,7 +37,7 @@
$_tx_thread_interrupt_restore:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
@@ -47,42 +47,36 @@ $_tx_thread_interrupt_restore:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_restore Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function is responsible for restoring interrupts to the state */
@/* returned by a previous _tx_thread_interrupt_disable call. */
-@/* */
-@/* INPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_end.S b/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_end.S
index 5d58b2a58..aab78cfd3 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,7 +34,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@
@@ -44,51 +44,45 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_end Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-@/* processing from system mode back to IRQ mode prior to the ISR */
-@/* calling _tx_thread_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_end(VOID)
@@ -100,7 +94,7 @@ _tx_thread_irq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_start.S b/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_start.S
index 33aa6f37c..7a5cb91bf 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_irq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -40,48 +40,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_start Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_context_save has been called and switches the IRQ */
-@/* processing to the system mode so nested IRQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r5/ac6/src/tx_thread_schedule.S b/ports/cortex_r5/ac6/src/tx_thread_schedule.S
index b895b1438..dc014e831 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_schedule.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_schedule.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -45,7 +45,7 @@
$_tx_thread_schedule:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_schedule @ Call _tx_thread_schedule function
@@ -55,45 +55,39 @@ $_tx_thread_schedule:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_schedule Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function waits for a thread control block pointer to appear in */
-@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-@/* in the variable, the corresponding thread is resumed. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* _tx_thread_system_return Return to system from thread */
-@/* _tx_thread_context_restore Restore thread's context */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@@ -123,7 +117,7 @@ __tx_thread_schedule_loop:
@
@ }
@ while(_tx_thread_execute_ptr == TX_NULL);
-@
+@
@ /* Yes! We have a thread to execute. Lockout interrupts and
@ transfer control to it. */
@
@@ -136,7 +130,7 @@ __tx_thread_schedule_loop:
@ /* Setup the current thread pointer. */
@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
@
- LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
STR r0, [r1] @ Setup current thread pointer
@
@ /* Increment the run count for this thread. */
@@ -150,7 +144,7 @@ __tx_thread_schedule_loop:
@ /* Setup time-slice, if present. */
@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
@
- LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
@ variable
LDR sp, [r0, #8] @ Switch stack pointers
STR r3, [r2] @ Setup time-slice
diff --git a/ports/cortex_r5/ac6/src/tx_thread_stack_build.S b/ports/cortex_r5/ac6/src/tx_thread_stack_build.S
index 2b2de3dd0..30dac9726 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_stack_build.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_stack_build.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -48,7 +48,7 @@ CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interru
.type $_tx_thread_stack_build,function
$_tx_thread_stack_build:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
@@ -58,44 +58,38 @@ $_tx_thread_stack_build:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_stack_build Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function builds a stack frame on the supplied thread's stack. */
@/* The stack frame results in a fake interrupt return to the supplied */
-@/* function pointer. */
-@/* */
-@/* INPUT */
-@/* */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
@/* thread_ptr Pointer to thread control blk */
@/* function_ptr Pointer to return function */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* CALLS */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_thread_create Create thread service */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -104,10 +98,10 @@ $_tx_thread_stack_build:
.type _tx_thread_stack_build,function
_tx_thread_stack_build:
@
-@
+@
@ /* Build a fake interrupt frame. The form of the fake interrupt stack
@ on the ARM9 should look like the following after it is built:
-@
+@
@ Stack Top: 1 Interrupt stack frame type
@ CPSR Initial value for CPSR
@ a1 (r0) Initial value for a1
diff --git a/ports/cortex_r5/ac6/src/tx_thread_system_return.S b/ports/cortex_r5/ac6/src/tx_thread_system_return.S
index 3ca9650e3..50e5d2e20 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_system_return.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_system_return.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -47,7 +47,7 @@
$_tx_thread_system_return:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_system_return @ Call _tx_thread_system_return function
@@ -57,44 +57,38 @@ $_tx_thread_system_return:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_system_return Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is target processor specific. It is used to transfer */
-@/* control from a thread back to the ThreadX system. Only a */
-@/* minimal context is saved since the compiler assumes temp registers */
-@/* are going to get slicked by a function call anyway. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling loop */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ThreadX components */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
@/* */
@/**************************************************************************/
@VOID _tx_thread_system_return(VOID)
@@ -129,7 +123,7 @@ _tx_skip_solicited_vfp_save:
@
MOV r0, #0 @ Build a solicited stack type
STMDB sp!, {r0-r1} @ Save type and CPSR
-@
+@
@
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@
diff --git a/ports/cortex_r5/ac6/src/tx_thread_vectored_context_save.S b/ports/cortex_r5/ac6/src/tx_thread_vectored_context_save.S
index aa5bc2f34..b79d87927 100644
--- a/ports/cortex_r5/ac6/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_r5/ac6/src/tx_thread_vectored_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -36,47 +36,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_vectored_context_save Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_vectored_context_save(VOID)
@@ -134,7 +128,7 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1, #0] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Note: Minimal context of interrupted thread is already saved. */
@@ -166,7 +160,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
diff --git a/ports/cortex_r5/ac6/src/tx_timer_interrupt.S b/ports/cortex_r5/ac6/src/tx_timer_interrupt.S
index 0261bddcf..5bab06c00 100644
--- a/ports/cortex_r5/ac6/src/tx_timer_interrupt.S
+++ b/ports/cortex_r5/ac6/src/tx_timer_interrupt.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Timer */
@/** */
@@ -55,7 +55,7 @@
.type $_tx_timer_interrupt,function
$_tx_timer_interrupt:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
@@ -65,46 +65,40 @@ $_tx_timer_interrupt:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_timer_interrupt Cortex-R5/AC6 */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt Cortex-R5/AC6 */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function processes the hardware timer interrupt. This */
-@/* processing includes incrementing the system clock and checking for */
-@/* time slice and/or timer expiration. If either is found, the */
-@/* interrupt context save/restore functions are called along with the */
-@/* expiration functions. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_time_slice Time slice interrupted thread */
-@/* _tx_timer_expiration_process Timer expiration processing */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* interrupt vector */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@@ -129,7 +123,7 @@ _tx_timer_interrupt:
@ if (_tx_timer_time_slice)
@ {
@
- LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
LDR r2, [r3] @ Pickup time-slice
CMP r2, #0 @ Is it non-active?
BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
@@ -247,7 +241,7 @@ __tx_timer_dont_activate:
@ if (_tx_timer_expired_time_slice)
@ {
@
- LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
LDR r2, [r3] @ Pickup the actual flag
CMP r2, #0 @ See if the flag is set
BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
diff --git a/ports/cortex_r5/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_r5/ghs/example_build/tx_initialize_low_level.arm
index 296a427df..e3dc99a56 100644
--- a/ports/cortex_r5/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_r5/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/inc/tx_el.h b/ports/cortex_r5/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_r5/ghs/inc/tx_el.h
+++ b/ports/cortex_r5/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_r5/ghs/inc/tx_port.h b/ports/cortex_r5/ghs/inc/tx_port.h
index 19c7de488..5b435fcbb 100644
--- a/ports/cortex_r5/ghs/inc/tx_port.h
+++ b/ports/cortex_r5/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R5/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R5/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r5/ghs/readme_threadx.txt b/ports/cortex_r5/ghs/readme_threadx.txt
index 623835477..ac06719a6 100644
--- a/ports/cortex_r5/ghs/readme_threadx.txt
+++ b/ports/cortex_r5/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R5
+ Microsoft's Azure RTOS ThreadX for Cortex-R5
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-R5 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-R5 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-R5 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-R5 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-R5 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-R5 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-R5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -520,7 +520,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-R5/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-R5/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_r5/ghs/src/tx_el.c b/ports/cortex_r5/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_r5/ghs/src/tx_el.c
+++ b/ports/cortex_r5/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_r5/ghs/src/tx_thread_context_restore.arm b/ports/cortex_r5/ghs/src/tx_thread_context_restore.arm
index 724b49954..b103b804c 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_context_save.arm b/ports/cortex_r5/ghs/src/tx_thread_context_save.arm
index 408ad5122..29a95aaeb 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_r5/ghs/src/tx_thread_fiq_context_restore.arm
index e1e917a2b..4287f779e 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_r5/ghs/src/tx_thread_fiq_context_save.arm
index 166a98986..28725995d 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_end.arm
index c00013a3e..8e2dcd915 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_start.arm
index 0ab401e41..b83c36612 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_r5/ghs/src/tx_thread_interrupt_control.arm
index 66670a6b0..a38ad2b5b 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_r5/ghs/src/tx_thread_interrupt_disable.arm
index c632e9204..bea8c467b 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_r5/ghs/src/tx_thread_interrupt_restore.arm
index cf8d32204..1e3de8d8a 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_end.arm
index 34d15f49d..a8085f713 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_start.arm
index 5fa03cea2..86bca486b 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_schedule.arm b/ports/cortex_r5/ghs/src/tx_thread_schedule.arm
index 50ea6b47e..e0548e7f9 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_stack_build.arm b/ports/cortex_r5/ghs/src/tx_thread_stack_build.arm
index 373990dc1..eaad8d168 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_system_return.arm b/ports/cortex_r5/ghs/src/tx_thread_system_return.arm
index b9b3c0bdb..488b93631 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_r5/ghs/src/tx_thread_vectored_context_save.arm
index 117ab4995..11bca1b99 100644
--- a/ports/cortex_r5/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_r5/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/ghs/src/tx_timer_interrupt.arm b/ports/cortex_r5/ghs/src/tx_timer_interrupt.arm
index c9125dca3..5b3a4e3ea 100644
--- a/ports/cortex_r5/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_r5/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r5/gnu/example_build/crt0.S b/ports/cortex_r5/gnu/example_build/crt0.S
index aa0f32396..56b6c9580 100644
--- a/ports/cortex_r5/gnu/example_build/crt0.S
+++ b/ports/cortex_r5/gnu/example_build/crt0.S
@@ -26,13 +26,13 @@ _mainCRTStartup:
mov a2, #0 /* Second arg: fill value */
mov fp, a2 /* Null frame pointer */
mov r7, a2 /* Null frame pointer for Thumb */
-
+
ldr a1, .LC1 /* First arg: start of memory block */
- ldr a3, .LC2
+ ldr a3, .LC2
sub a3, a3, a1 /* Third arg: length of block */
-
-
+
+
bl memset
mov r0, #0 /* no arguments */
mov r1, #0 /* no argv either */
@@ -48,15 +48,15 @@ _mainCRTStartup:
/* bl init */
mov r0, r4
mov r1, r5
-#endif
+#endif
bl main
bl exit /* Should not return. */
-
- /* For Thumb, constants must be after the code since only
+
+ /* For Thumb, constants must be after the code since only
positive offsets are supported for PC relative addresses. */
-
+
.align 0
.LC0:
.LC1:
diff --git a/ports/cortex_r5/gnu/example_build/reset.S b/ports/cortex_r5/gnu/example_build/reset.S
index a11c826a3..5d05258bb 100644
--- a/ports/cortex_r5/gnu/example_build/reset.S
+++ b/ports/cortex_r5/gnu/example_build/reset.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -65,11 +65,11 @@ SWI:
.word __tx_swi_interrupt @ Software interrupt handler
PREFETCH:
.word __tx_prefetch_handler @ Prefetch exception handler
-ABORT:
+ABORT:
.word __tx_abort_handler @ Abort exception handler
-RESERVED:
+RESERVED:
.word __tx_reserved_handler @ Reserved exception handler
-IRQ:
+IRQ:
.word __tx_irq_handler @ IRQ interrupt handler
FIQ:
.word __tx_fiq_handler @ FIQ interrupt handler
diff --git a/ports/cortex_r5/gnu/example_build/sample_threadx.c b/ports/cortex_r5/gnu/example_build/sample_threadx.c
index 418ec634f..8c61de065 100644
--- a/ports/cortex_r5/gnu/example_build/sample_threadx.c
+++ b/ports/cortex_r5/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -242,11 +242,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -305,7 +305,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -358,7 +358,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r5/gnu/example_build/sample_threadx.ld b/ports/cortex_r5/gnu/example_build/sample_threadx.ld
index 3dea4e1ca..e940b2b88 100644
--- a/ports/cortex_r5/gnu/example_build/sample_threadx.ld
+++ b/ports/cortex_r5/gnu/example_build/sample_threadx.ld
@@ -7,7 +7,7 @@ OUTPUT_ARCH(arm)
SECTIONS
{
. = 0x00000000;
-
+
.vectors : {reset.o(.text) }
/* Read-only sections, merged into text segment: */
@@ -94,8 +94,8 @@ SECTIONS
*(.gnu.linkonce.t*)
*(.glue_7t) *(.glue_7)
} =0
- .init :
- {
+ .init :
+ {
KEEP (*(.init))
} =0
_etext = .;
@@ -120,7 +120,7 @@ SECTIONS
.data1 : { *(.data1) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
- .ctors :
+ .ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
@@ -153,9 +153,9 @@ SECTIONS
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
- .sdata :
+ .sdata :
{
- *(.sdata)
+ *(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
@@ -191,7 +191,7 @@ SECTIONS
_stack_bottom = ABSOLUTE(.) ;
- /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
SYS stack if nested interrupts are enabled. */
. = ALIGN(8) ;
. += 4096 ;
diff --git a/ports/cortex_r5/gnu/example_build/tx_initialize_low_level.S b/ports/cortex_r5/gnu/example_build/tx_initialize_low_level.S
index a34712777..b51eaeba1 100644
--- a/ports/cortex_r5/gnu/example_build/tx_initialize_low_level.S
+++ b/ports/cortex_r5/gnu/example_build/tx_initialize_low_level.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Initialize */
@/** */
@@ -62,7 +62,7 @@ SYS_STACK_SIZE = 1024 @ System stack size
.type $_tx_initialize_low_level,function
$_tx_initialize_low_level:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
@@ -72,45 +72,39 @@ $_tx_initialize_low_level:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_initialize_low_level Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for any low-level processor */
-@/* initialization, including setting up interrupt vectors, setting */
-@/* up a periodic timer interrupt source, saving the system stack */
-@/* pointer for use in ISR processing later, and finding the first */
-@/* available RAM memory address for tx_application_define. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
@/* */
@/**************************************************************************/
@VOID _tx_initialize_low_level(VOID)
@@ -125,7 +119,7 @@ _tx_initialize_low_level:
@
LDR r1, =_sp @ Get pointer to stack area
-#ifdef TX_ENABLE_IRQ_NESTING
+#ifdef TX_ENABLE_IRQ_NESTING
@
@ /* Setup the system mode stack for nested interrupt support */
@
@@ -156,7 +150,7 @@ _tx_initialize_low_level:
MSR CPSR, r0 @ Enter SVC mode
LDR r2, =_stack_bottom @ Pickup stack bottom
CMP r3, r2 @ Compare the current stack end with the bottom
-_stack_error_loop:
+_stack_error_loop:
BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
@
@ /* Save the system stack pointer. */
@@ -208,7 +202,7 @@ __tx_reserved_handler:
B __tx_reserved_handler @ Reserved exception handler
@
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -216,17 +210,17 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -240,7 +234,7 @@ __tx_irq_processing_return:
@
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -256,28 +250,28 @@ __tx_irq_processing_return:
@__tx_example_vectored_irq_handler:
@
@
-@ /* Save initial context and call context save to prepare for
+@ /* Save initial context and call context save to prepare for
@ vectored ISR execution. */
@
@ STMDB sp!, {r0-r3} @ Save some scratch registers
@ MRS r0, SPSR @ Pickup saved SPSR
-@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ SUB lr, lr, #4 @ Adjust point of interrupt
@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
@ BL _tx_thread_vectored_context_save @ Vectored context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. In
+@ interrupt, and all C scratch registers are available for use. In
@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-@ small code sequences where lr is saved before enabling interrupts and
+@ small code sequences where lr is saved before enabling interrupts and
@ restored after interrupts are again disabled. */
@
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
@ from IRQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with IRQ interrupts enabled.
-@
-@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
@ prior to enabling nested IRQ interrupts. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_start
@@ -286,7 +280,7 @@ __tx_irq_processing_return:
@ /* Application IRQ handlers can be called here! */
@
@ /* If interrupt nesting was started earlier, the end of interrupt nesting
-@ service must be called before returning to _tx_thread_context_restore.
+@ service must be called before returning to _tx_thread_context_restore.
@ This routine returns in processing in IRQ mode with interrupts disabled. */
@#ifdef TX_ENABLE_IRQ_NESTING
@ BL _tx_thread_irq_nesting_end
@@ -308,11 +302,11 @@ __tx_fiq_processing_return:
@ /* At this point execution is still in the FIQ mode. The CPSR, point of
@ interrupt, and all C scratch registers are available for use. */
@
-@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
@ from FIQ mode with interrupts disabled. This routine switches to the
-@ system mode and returns with FIQ interrupts enabled.
+@ system mode and returns with FIQ interrupts enabled.
@
-@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
@ prior to enabling nested FIQ interrupts. */
#ifdef TX_ENABLE_FIQ_NESTING
BL _tx_thread_fiq_nesting_start
diff --git a/ports/cortex_r5/gnu/inc/tx_port.h b/ports/cortex_r5/gnu/inc/tx_port.h
index 9b645b695..0a09f9eac 100644
--- a/ports/cortex_r5/gnu/inc/tx_port.h
+++ b/ports/cortex_r5/gnu/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R5/GNU */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R5/GNU */
/* 6.1.12 */
/* */
/* AUTHOR */
@@ -32,27 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
-/* 07-29-2022 Scott Larson Updated comments, removed */
-/* unneeded temp variable, */
-/* resulting in version 6.1.12 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -65,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -78,7 +67,7 @@
#include
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -114,12 +103,12 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#ifdef TX_ENABLE_FIQ_SUPPORT
#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
@@ -129,8 +118,8 @@ typedef unsigned short USHORT;
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -177,7 +166,7 @@ typedef unsigned short USHORT;
#define TX_INLINE_INITIALIZATION
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -189,13 +178,13 @@ typedef unsigned short USHORT;
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
-#define TX_THREAD_EXTENSION_2
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -209,11 +198,11 @@ typedef unsigned short USHORT;
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -221,8 +210,8 @@ typedef unsigned short USHORT;
tx_thread_shell_entry, and tx_thread_terminate. */
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -249,24 +238,24 @@ typedef unsigned short USHORT;
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
-
+
#if __TARGET_ARCH_ARM > 4
#ifndef __thumb__
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
@@ -310,8 +299,8 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R5/GNU Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R5/GNU Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r5/gnu/readme_threadx.txt b/ports/cortex_r5/gnu/readme_threadx.txt
index a9a28305f..bc806c75c 100644
--- a/ports/cortex_r5/gnu/readme_threadx.txt
+++ b/ports/cortex_r5/gnu/readme_threadx.txt
@@ -1,55 +1,55 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R5
+ Microsoft's Azure RTOS ThreadX for Cortex-R5
Using the GNU Tools
1. Building the ThreadX run-time Library
-First make sure you are in the "example_build" directory. Also, make sure that
-you have setup your path and other environment variables necessary for the GNU
-development environment.
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
-At this point you may run the build_threadx.bat batch file. This will build the
-ThreadX run-time environment in the "example_build" directory.
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
-You should observe assembly and compilation of a series of ThreadX source
-files. At the end of the batch file, they are all combined into the
-run-time library file: tx.a. This file must be linked with your
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
application in order to use ThreadX.
2. Demonstration System
-Building the demonstration is easy; simply execute the build_threadx_sample.bat
-batch file while inside the "example_build" directory.
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with TX.A. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
that can be downloaded and executed.
3. System Initialization
-The entry point in ThreadX for the Cortex-R5 using GNU tools is at label _start.
+The entry point in ThreadX for the Cortex-R5 using GNU tools is at label _start.
This is defined within the modified version of the GNU startup code - crt0.S.
-The ThreadX tx_initialize_low_level.S file is responsible for setting up various
-system data structures, the interrupt vectors, and a periodic timer interrupt source.
-By default, the vector area is defined to be located at the "__vectors" label,
-which is defined in reset.S. This area is typically located at 0. In situations
-where this is impossible, the vectors at the "__vectors" label should be copied
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
to address 0.
-This is also where initialization of a periodic timer interrupt source should take
+This is also where initialization of a periodic timer interrupt source should take
place.
-In addition, _tx_initialize_low_level defines the first available address
-for use by the application, which is supplied as the sole input parameter
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
to your application definition function, tx_application_define.
4. Assembler / Compiler Switches
-The following are compiler switches used in building the demonstration
+The following are compiler switches used in building the demonstration
system:
Compiler/Assembler Meaning
@@ -73,164 +73,164 @@ Application Defines ( -D option)
ThreadX assembly files. If used,
it should be used on all assembly
files and the generic C source of
- ThreadX should be compiled with
+ ThreadX should be compiled with
TX_ENABLE_FIQ_SUPPORT defined as well.
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S.
TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
- nested support. If FIQ nested
+ nested support. If FIQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.S. In addition,
IRQ nesting should also be enabled.
TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
interrupt handling in the ThreadX
- generic C source. This define
+ generic C source. This define
should also be used in conjunction
with the corresponding assembler
- define.
+ define.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
5. Register Usage and Stack Frames
-The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
-registers for each function. All other registers used by a C function must
-be preserved by the function. ThreadX takes advantage of this in situations
-where a context switch happens as a result of making a ThreadX service call
-(which is itself a C function). In such cases, the saved context of a thread
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -248,52 +248,52 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R5 vectors start at address zero. The demonstration system startup
-reset.S file contains the vectors and is loaded at address zero. On actual
-hardware platforms, this area might have to be copied to address 0.
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
-ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.S:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -301,7 +301,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -314,7 +314,7 @@ __tx_irq_processing_return:
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.S:
.global __tx_irq_example_handler
@@ -324,12 +324,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} @ Save some scratch registers
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
@
@ /* At this point execution is still in the IRQ mode. The CPSR, point of
-@ interrupt, and all C scratch registers are available for use. Note
+@ interrupt, and all C scratch registers are available for use. Note
@ that IRQ interrupts are still disabled upon return from the context
@ save function. */
@
@@ -346,22 +346,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
.global __tx_irq_handler
- .global __tx_irq_processing_return
+ .global __tx_irq_processing_return
__tx_irq_handler:
@
@ /* Jump to context save to save system context. */
@@ -369,10 +369,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
@
@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
-@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-@
+@
@ /* Application ISR call(s) go here! */
@
@ /* Disable nested IRQ interrupts. The mode is switched back to
@@ -385,12 +385,12 @@ __tx_irq_processing_return:
7.3 FIQ Interrupts
-By default, FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of each thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.S.
@@ -399,7 +399,7 @@ from default FIQ ISRs, which is located in tx_initialize_low_level.S.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.S:
@@ -427,18 +427,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
+The SYS mode stack is used during the SYS mode operation, which was
setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
-FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -454,7 +454,7 @@ __tx_fiq_processing_return:
@ interrupt, and all C scratch registers are available for use. */
@
@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
-@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
@ cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@
@@ -470,12 +470,12 @@ __tx_fiq_processing_return:
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
-interrupt source, these services are not functional but the remainder of
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
ThreadX will still run.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.S for the demonstration system.
diff --git a/ports/cortex_r5/gnu/src/tx_thread_context_restore.S b/ports/cortex_r5/gnu/src/tx_thread_context_restore.S
index 4f3721cba..c8c28acb7 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -43,48 +43,42 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_restore Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the interrupt context if it is processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_restore(VOID)
@@ -115,13 +109,13 @@ _tx_thread_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
diff --git a/ports/cortex_r5/gnu/src/tx_thread_context_save.S b/ports/cortex_r5/gnu/src/tx_thread_context_save.S
index 8806203d4..124341860 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -30,47 +30,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_context_save Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_context_save(VOID)
@@ -86,7 +80,7 @@ _tx_thread_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable FIQ interrupts
#endif
@@ -104,7 +98,7 @@ _tx_thread_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -120,7 +114,7 @@ _tx_thread_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
__tx_thread_not_nested_save:
@ }
@@ -134,13 +128,13 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} @ Store other registers
@
@ /* Save the current stack pointer in the thread's control block. */
@@ -160,7 +154,7 @@ __tx_thread_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@ else
@@ -170,7 +164,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
@@ -185,7 +179,7 @@ __tx_thread_idle_system_save:
#endif
ADD sp, sp, #16 @ Recover saved registers
- B __tx_irq_processing_return @ Continue IRQ processing
+ B __tx_irq_processing_return @ Continue IRQ processing
@
@ }
@}
diff --git a/ports/cortex_r5/gnu/src/tx_thread_fiq_context_restore.S b/ports/cortex_r5/gnu/src/tx_thread_fiq_context_restore.S
index 5d1c2cc89..5ebe4ac44 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_fiq_context_restore.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_fiq_context_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -24,7 +24,7 @@
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
THUMB_MASK = 0x20 @ Thumb bit mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@@ -45,44 +45,38 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_restore Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function restores the fiq interrupt context when processing a */
-@/* nested interrupt. If not, it returns to the interrupt thread if no */
-@/* preemption is necessary. Otherwise, if preemption is necessary or */
-@/* if no thread was running, the function returns to the scheduler. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling routine */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* FIQ ISR Interrupt Service Routines */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_context_restore(VOID)
@@ -109,13 +103,13 @@ _tx_thread_fiq_context_restore:
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
SUB r2, r2, #1 @ Decrement the counter
- STR r2, [r3] @ Store the counter
+ STR r2, [r3] @ Store the counter
CMP r2, #0 @ Was this the first interrupt?
BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
@
@ /* Interrupts are nested. */
@
-@ /* Just recover the saved registers and return to the point of
+@ /* Just recover the saved registers and return to the point of
@ interrupt. */
@
LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
@@ -203,7 +197,7 @@ __tx_thread_fiq_preempt_restore:
BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
@
@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
-@ _tx_timer_time_slice = 0;
+@ _tx_timer_time_slice = 0;
@
STR r2, [r0, #24] @ Save thread's time-slice
MOV r2, #0 @ Clear value
diff --git a/ports/cortex_r5/gnu/src/tx_thread_fiq_context_save.S b/ports/cortex_r5/gnu/src/tx_thread_fiq_context_save.S
index 6c94dc91c..ccd30f3de 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_fiq_context_save.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_fiq_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -34,43 +34,37 @@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_context_save Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@ VOID _tx_thread_fiq_context_save(VOID)
@@ -86,7 +80,7 @@ _tx_thread_fiq_context_save:
@ if (_tx_thread_system_state++)
@ {
@
- STMDB sp!, {r0-r3} @ Save some working registers
+ STMDB sp!, {r0-r3} @ Save some working registers
LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
LDR r2, [r3] @ Pickup system state
CMP r2, #0 @ Is this the first interrupt?
@@ -101,7 +95,7 @@ _tx_thread_fiq_context_save:
@ calling ISR. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} @ Store other registers
@
@ /* Return to the ISR. */
@@ -117,38 +111,38 @@ _tx_thread_fiq_context_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
__tx_thread_fiq_not_nested_save:
-@ }
+@ }
@
@ /* Otherwise, not nested, check to see if a thread was running. */
@ else if (_tx_thread_current_ptr)
-@ {
+@ {
@
ADD r2, r2, #1 @ Increment the interrupt counter
STR r2, [r3] @ Store it back in the variable
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
-@ @ scheduling loop - nothing needs saving!
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
@
@ /* Save minimal context of interrupted thread. */
@
MRS r2, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
-@ @ need to save sl and ip since FIQ has
-@ @ copies of these registers. Nested
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
@ @ interrupt processing does need to save
@ @ these registers.
@
@ /* Save the current stack pointer in the thread's control block. */
-@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
@
@ /* Switch to the system stack. */
-@ sp = _tx_thread_system_stack_ptr;
+@ sp = _tx_thread_system_stack_ptr;
@
MOV r10, #0 @ Clear stack limit
@@ -161,7 +155,7 @@ __tx_thread_fiq_not_nested_save:
POP {lr} @ Recover ISR lr
#endif
- B __tx_fiq_processing_return @ Continue FIQ processing
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
@ else
@@ -181,16 +175,16 @@ __tx_thread_fiq_idle_system_save:
#endif
@
@ /* Not much to do here, save the current SPSR and LR for possible
-@ use in IRQ interrupted in idle system conditions, and return to
+@ use in IRQ interrupted in idle system conditions, and return to
@ FIQ interrupt processing. */
@
MRS r0, SPSR @ Pickup saved SPSR
- SUB lr, lr, #4 @ Adjust point of interrupt
+ SUB lr, lr, #4 @ Adjust point of interrupt
STMDB sp!, {r0, lr} @ Store other registers that will get used
-@ @ or stripped off the stack in context
-@ @ restore
- B __tx_fiq_processing_return @ Continue FIQ processing
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
@
@ }
-@}
+@}
diff --git a/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_end.S b/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_end.S
index 752d6e63a..4f9e04e36 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_end.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@
@
@@ -37,51 +37,45 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_end Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
-@/* processing from system mode back to FIQ mode prior to the ISR */
-@/* calling _tx_thread_fiq_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_end(VOID)
@@ -93,7 +87,7 @@ _tx_thread_fiq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_start.S b/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_start.S
index f013cc3a8..58eddaf4c 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_start.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_fiq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,48 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_fiq_nesting_start Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from FIQ mode after */
-@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
-@/* processing to the system mode so nested FIQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with FIQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_fiq_nesting_start(VOID)
diff --git a/ports/cortex_r5/gnu/src/tx_thread_interrupt_control.S b/ports/cortex_r5/gnu/src/tx_thread_interrupt_control.S
index 7ef4c98df..babf76900 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_interrupt_control.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_interrupt_control.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -35,7 +35,7 @@ INT_MASK = 0x03F
$_tx_thread_interrupt_control:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
@@ -45,42 +45,36 @@ $_tx_thread_interrupt_control:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_control Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for changing the interrupt lockout */
-@/* posture of the system. */
-@/* */
-@/* INPUT */
-@/* */
-@/* new_posture New interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)
diff --git a/ports/cortex_r5/gnu/src/tx_thread_interrupt_disable.S b/ports/cortex_r5/gnu/src/tx_thread_interrupt_disable.S
index 00b10b7d8..98daf99e5 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_interrupt_disable.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_interrupt_disable.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_disable:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
@@ -41,41 +41,35 @@ $_tx_thread_interrupt_disable:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_disable Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is responsible for disabling interrupts */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)
@@ -93,7 +87,7 @@ _tx_thread_interrupt_disable:
#ifdef TX_ENABLE_FIQ_SUPPORT
CPSID if @ Disable IRQ and FIQ
#else
- CPSID i @ Disable IRQ
+ CPSID i @ Disable IRQ
#endif
#ifdef __THUMB_INTERWORK
diff --git a/ports/cortex_r5/gnu/src/tx_thread_interrupt_restore.S b/ports/cortex_r5/gnu/src/tx_thread_interrupt_restore.S
index 8e510f15a..44134fa40 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_interrupt_restore.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_interrupt_restore.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -31,7 +31,7 @@
$_tx_thread_interrupt_restore:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
@@ -41,42 +41,36 @@ $_tx_thread_interrupt_restore:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_interrupt_restore Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function is responsible for restoring interrupts to the state */
@/* returned by a previous _tx_thread_interrupt_disable call. */
-@/* */
-@/* INPUT */
-@/* */
-@/* old_posture Old interrupt lockout posture */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* Application Code */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_end.S b/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_end.S
index 61edbd158..5099bf15b 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_end.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_end.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -27,7 +27,7 @@ DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
DISABLE_INTS = 0x80 @ Disable IRQ interrupts
#endif
-MODE_MASK = 0x1F @ Mode mask
+MODE_MASK = 0x1F @ Mode mask
IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@
@
@@ -37,51 +37,45 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_end Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-@/* processing from system mode back to IRQ mode prior to the ISR */
-@/* calling _tx_thread_context_restore. Note that this function */
-@/* assumes the system stack pointer is in the same position after */
-@/* nesting start function was called. */
-@/* */
-@/* This function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts disabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
-@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_end(VOID)
@@ -93,7 +87,7 @@ _tx_thread_irq_nesting_end:
MRS r0, CPSR @ Pickup the CPSR
ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
MSR CPSR_c, r0 @ Disable interrupts
- LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
@ 8-byte alignment logic)
BIC r0, r0, #MODE_MASK @ Clear mode bits
ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
diff --git a/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_start.S b/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_start.S
index b547290cf..2fb5733f7 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_start.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_irq_nesting_start.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -33,48 +33,42 @@ SYS_MODE_BITS = 0x1F @ System mode bits
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_irq_nesting_start Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is called by the application from IRQ mode after */
-@/* _tx_thread_context_save has been called and switches the IRQ */
-@/* processing to the system mode so nested IRQ interrupt processing */
-@/* is possible (system mode has its own "lr" register). Note that */
-@/* this function assumes that the system mode stack pointer was setup */
-@/* during low-level initialization (tx_initialize_low_level.s). */
-@/* */
-@/* This function returns with IRQ interrupts enabled. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r5/gnu/src/tx_thread_schedule.S b/ports/cortex_r5/gnu/src/tx_thread_schedule.S
index 011af4804..e19265f5d 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_schedule.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_schedule.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -38,7 +38,7 @@
$_tx_thread_schedule:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_schedule @ Call _tx_thread_schedule function
@@ -48,45 +48,39 @@ $_tx_thread_schedule:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_schedule Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function waits for a thread control block pointer to appear in */
-@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-@/* in the variable, the corresponding thread is resumed. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_initialize_kernel_enter ThreadX entry function */
-@/* _tx_thread_system_return Return to system from thread */
-@/* _tx_thread_context_restore Restore thread's context */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
@/* */
@/**************************************************************************/
@VOID _tx_thread_schedule(VOID)
@@ -116,7 +110,7 @@ __tx_thread_schedule_loop:
@
@ }
@ while(_tx_thread_execute_ptr == TX_NULL);
-@
+@
@ /* Yes! We have a thread to execute. Lockout interrupts and
@ transfer control to it. */
@
@@ -129,7 +123,7 @@ __tx_thread_schedule_loop:
@ /* Setup the current thread pointer. */
@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
@
- LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
STR r0, [r1] @ Setup current thread pointer
@
@ /* Increment the run count for this thread. */
@@ -143,7 +137,7 @@ __tx_thread_schedule_loop:
@ /* Setup time-slice, if present. */
@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
@
- LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
@ variable
LDR sp, [r0, #8] @ Switch stack pointers
STR r3, [r2] @ Setup time-slice
diff --git a/ports/cortex_r5/gnu/src/tx_thread_stack_build.S b/ports/cortex_r5/gnu/src/tx_thread_stack_build.S
index 0bcc63ed9..f586573be 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_stack_build.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_stack_build.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@ CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interru
.type $_tx_thread_stack_build,function
$_tx_thread_stack_build:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
@@ -52,44 +52,38 @@ $_tx_thread_stack_build:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_stack_build Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
+@/* */
@/* This function builds a stack frame on the supplied thread's stack. */
@/* The stack frame results in a fake interrupt return to the supplied */
-@/* function pointer. */
-@/* */
-@/* INPUT */
-@/* */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
@/* thread_ptr Pointer to thread control blk */
@/* function_ptr Pointer to return function */
-@/* */
-@/* OUTPUT */
-@/* */
+@/* */
+@/* OUTPUT */
+@/* */
@/* None */
-@/* */
-@/* CALLS */
-@/* */
+@/* */
+@/* CALLS */
+@/* */
@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* _tx_thread_create Create thread service */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
@/* */
@/**************************************************************************/
@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -98,10 +92,10 @@ $_tx_thread_stack_build:
.type _tx_thread_stack_build,function
_tx_thread_stack_build:
@
-@
+@
@ /* Build a fake interrupt frame. The form of the fake interrupt stack
@ on the ARM9 should look like the following after it is built:
-@
+@
@ Stack Top: 1 Interrupt stack frame type
@ CPSR Initial value for CPSR
@ a1 (r0) Initial value for a1
diff --git a/ports/cortex_r5/gnu/src/tx_thread_system_return.S b/ports/cortex_r5/gnu/src/tx_thread_system_return.S
index 77cf89d55..0144b037c 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_system_return.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -42,7 +42,7 @@
$_tx_thread_system_return:
.thumb
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_thread_system_return @ Call _tx_thread_system_return function
@@ -52,44 +52,38 @@ $_tx_thread_system_return:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_system_return Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function is target processor specific. It is used to transfer */
-@/* control from a thread back to the ThreadX system. Only a */
-@/* minimal context is saved since the compiler assumes temp registers */
-@/* are going to get slicked by a function call anyway. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_schedule Thread scheduling loop */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ThreadX components */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
@/* */
@/**************************************************************************/
@VOID _tx_thread_system_return(VOID)
@@ -124,7 +118,7 @@ _tx_skip_solicited_vfp_save:
@
MOV r0, #0 @ Build a solicited stack type
STMDB sp!, {r0-r1} @ Save type and CPSR
-@
+@
@
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
@
diff --git a/ports/cortex_r5/gnu/src/tx_thread_vectored_context_save.S b/ports/cortex_r5/gnu/src/tx_thread_vectored_context_save.S
index 96e58d4fe..e985f24f4 100644
--- a/ports/cortex_r5/gnu/src/tx_thread_vectored_context_save.S
+++ b/ports/cortex_r5/gnu/src/tx_thread_vectored_context_save.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Thread */
@/** */
@@ -30,47 +30,41 @@
@
@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
@ since it will never be called 16-bit mode. */
-@
+@
.arm
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_thread_vectored_context_save Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function saves the context of an executing thread in the */
-@/* beginning of interrupt processing. The function also ensures that */
-@/* the system stack is used upon return to the calling ISR. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* None */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* ISRs */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
@/* */
@/**************************************************************************/
@VOID _tx_thread_vectored_context_save(VOID)
@@ -128,7 +122,7 @@ __tx_thread_not_nested_save:
LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
LDR r0, [r1, #0] @ Pickup current thread pointer
CMP r0, #0 @ Is it NULL?
- BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
@ scheduling loop - nothing needs saving!
@
@ /* Note: Minimal context of interrupted thread is already saved. */
@@ -160,7 +154,7 @@ __tx_thread_idle_system_save:
@
@ /* Interrupt occurred in the scheduling loop. */
@
-@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
@ processing. */
@
MOV r10, #0 @ Clear stack limit
diff --git a/ports/cortex_r5/gnu/src/tx_timer_interrupt.S b/ports/cortex_r5/gnu/src/tx_timer_interrupt.S
index b5d2553af..877150173 100644
--- a/ports/cortex_r5/gnu/src/tx_timer_interrupt.S
+++ b/ports/cortex_r5/gnu/src/tx_timer_interrupt.S
@@ -1,18 +1,18 @@
@/***************************************************************************
-@ * Copyright (c) 2024 Microsoft Corporation
-@ *
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
@ * This program and the accompanying materials are made available under the
@ * terms of the MIT License which is available at
@ * https://opensource.org/licenses/MIT.
-@ *
+@ *
@ * SPDX-License-Identifier: MIT
@ **************************************************************************/
@
@
@/**************************************************************************/
@/**************************************************************************/
-@/** */
-@/** ThreadX Component */
+@/** */
+@/** ThreadX Component */
@/** */
@/** Timer */
@/** */
@@ -48,7 +48,7 @@
.type $_tx_timer_interrupt,function
$_tx_timer_interrupt:
BX pc @ Switch to 32-bit mode
- NOP @
+ NOP @
.arm
STMFD sp!, {lr} @ Save return address
BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
@@ -58,46 +58,40 @@ $_tx_timer_interrupt:
@
.text
.align 2
-@/**************************************************************************/
-@/* */
-@/* FUNCTION RELEASE */
-@/* */
-@/* _tx_timer_interrupt Cortex-R5/GNU */
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt Cortex-R5/GNU */
@/* 6.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@/* */
@/* DESCRIPTION */
-@/* */
-@/* This function processes the hardware timer interrupt. This */
-@/* processing includes incrementing the system clock and checking for */
-@/* time slice and/or timer expiration. If either is found, the */
-@/* interrupt context save/restore functions are called along with the */
-@/* expiration functions. */
-@/* */
-@/* INPUT */
-@/* */
-@/* None */
-@/* */
-@/* OUTPUT */
-@/* */
-@/* None */
-@/* */
-@/* CALLS */
-@/* */
-@/* _tx_thread_time_slice Time slice interrupted thread */
-@/* _tx_timer_expiration_process Timer expiration processing */
-@/* */
-@/* CALLED BY */
-@/* */
-@/* interrupt vector */
-@/* */
-@/* RELEASE HISTORY */
-@/* */
-@/* DATE NAME DESCRIPTION */
@/* */
-@/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
@/* */
@/**************************************************************************/
@VOID _tx_timer_interrupt(VOID)
@@ -122,7 +116,7 @@ _tx_timer_interrupt:
@ if (_tx_timer_time_slice)
@ {
@
- LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
LDR r2, [r3] @ Pickup time-slice
CMP r2, #0 @ Is it non-active?
BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
@@ -240,7 +234,7 @@ __tx_timer_dont_activate:
@ if (_tx_timer_expired_time_slice)
@ {
@
- LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
LDR r2, [r3] @ Pickup the actual flag
CMP r2, #0 @ See if the flag is set
BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
diff --git a/ports/cortex_r5/iar/example_build/sample_threadx.c b/ports/cortex_r5/iar/example_build/sample_threadx.c
index 983109cc2..ca92ff864 100644
--- a/ports/cortex_r5/iar/example_build/sample_threadx.c
+++ b/ports/cortex_r5/iar/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -63,7 +63,7 @@ void thread_6_and_7_entry(ULONG thread_input);
int main()
{
-
+
/* Enter the ThreadX kernel. */
tx_kernel_enter();
}
@@ -87,42 +87,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -130,23 +130,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -249,11 +249,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -312,7 +312,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -365,7 +365,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/cortex_r5/iar/example_build/tx_initialize_low_level.s b/ports/cortex_r5/iar/example_build/tx_initialize_low_level.s
index 745a9d19c..680aeb6d8 100644
--- a/ports/cortex_r5/iar/example_build/tx_initialize_low_level.s
+++ b/ports/cortex_r5/iar/example_build/tx_initialize_low_level.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Initialize */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Initialize */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -52,7 +52,7 @@ SVC_MODE DEFINE 0x13 ; SVC mode
;
;
;
-;/* Define the FREE_MEM segment that will specify where free memory is
+;/* Define the FREE_MEM segment that will specify where free memory is
; defined. This must also be located in at the end of other RAM segments
; in the linker control file. The value of this segment is what is passed
; to tx_application_define. */
@@ -65,45 +65,39 @@ __tx_free_memory_start
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_initialize_low_level Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for any low-level processor */
-;/* initialization, including setting up interrupt vectors, setting */
-;/* up a periodic timer interrupt source, saving the system stack */
-;/* pointer for use in ISR processing later, and finding the first */
-;/* available RAM memory address for tx_application_define. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
;/* */
;/**************************************************************************/
;VOID _tx_initialize_low_level(VOID)
@@ -135,7 +129,7 @@ _tx_initialize_low_level
;
LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
STR r0, [r2, #0] ; Save first free memory address
-;
+;
; /* Setup Timer for periodic interrupts. */
;
; /* Done, return to caller. */
@@ -183,17 +177,17 @@ IRQ_Handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_start
@@ -208,7 +202,7 @@ __tx_irq_processing_return
; /* Application IRQ handlers can be called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
#ifdef TX_ENABLE_IRQ_NESTING
BL _tx_thread_irq_nesting_end
@@ -227,22 +221,22 @@ __tx_irq_processing_return
; /* Jump to context save to save system context. */
; STMDB sp!, {r0-r3} ; Save some scratch registers
; MRS r0, SPSR ; Pickup saved SPSR
-; SUB lr, lr, #4 ; Adjust point of interrupt
+; SUB lr, lr, #4 ; Adjust point of interrupt
; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
; BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. In
+; interrupt, and all C scratch registers are available for use. In
; addition, IRQ interrupts may be re-enabled - with certain restrictions -
; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
-; small code sequences where lr is saved before enabling interrupts and
+; small code sequences where lr is saved before enabling interrupts and
; restored after interrupts are again disabled. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_start
@@ -251,7 +245,7 @@ __tx_irq_processing_return
; /* Application IRQ handler is called here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;#ifdef TX_ENABLE_IRQ_NESTING
; BL _tx_thread_irq_nesting_end
diff --git a/ports/cortex_r5/iar/inc/tx_port.h b/ports/cortex_r5/iar/inc/tx_port.h
index 45e196fdd..eb5e46d98 100644
--- a/ports/cortex_r5/iar/inc/tx_port.h
+++ b/ports/cortex_r5/iar/inc/tx_port.h
@@ -1,17 +1,18 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
+/** */
/** ThreadX Component */
/** */
/** Port Specific */
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Cortex-R5/IAR */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Cortex-R5/IAR */
/* 6.1.6 */
/* */
/* AUTHOR */
@@ -32,24 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 04-02-2021 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.6 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -62,7 +54,7 @@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
-/* Yes, include the user defines in tx_user.h. The defines in this file may
+/* Yes, include the user defines in tx_user.h. The defines in this file may
alternately be defined on the command line. */
#include "tx_user.h"
@@ -79,7 +71,7 @@
#endif
-/* Define ThreadX basic types for this port. */
+/* Define ThreadX basic types for this port. */
#define VOID void
typedef char CHAR;
@@ -115,19 +107,19 @@ typedef unsigned short USHORT;
#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
#endif
-#ifndef TX_TIMER_THREAD_PRIORITY
-#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
#endif
-/* Define various constants for the ThreadX ARM port. */
+/* Define various constants for the ThreadX ARM port. */
#define TX_INT_DISABLE 0x80 /* Disable IRQ interrupts */
#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
-/* Define the clock source for trace event entry time stamp. The following two item are port specific.
- For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
source constants would be:
#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
@@ -172,7 +164,7 @@ ULONG _tx_misra_time_stamp_get(VOID);
#endif
-/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
define is negated, thereby forcing the stack fill which is necessary for the stack checking
@@ -186,18 +178,18 @@ ULONG _tx_misra_time_stamp_get(VOID);
/* Define the TX_THREAD control block extensions for this port. The main reason
- for the multiple macros is so that backward compatibility can be maintained with
+ for the multiple macros is so that backward compatibility can be maintained with
existing ThreadX kernel awareness modules. */
-#define TX_THREAD_EXTENSION_0
-#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable; \
- VOID *tx_thread_iar_tls_pointer;
+ VOID *tx_thread_iar_tls_pointer;
#else
#define TX_THREAD_EXTENSION_2 ULONG tx_thread_vfp_enable;
#endif
-#define TX_THREAD_EXTENSION_3
+#define TX_THREAD_EXTENSION_3
/* Define the port extensions of the remaining ThreadX objects. */
@@ -211,11 +203,11 @@ ULONG _tx_misra_time_stamp_get(VOID);
#define TX_TIMER_EXTENSION
-/* Define the user extension field of the thread control block. Nothing
+/* Define the user extension field of the thread control block. Nothing
additional is needed for this port so it is defined as white space. */
#ifndef TX_THREAD_USER_EXTENSION
-#define TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
#endif
@@ -225,23 +217,23 @@ ULONG _tx_misra_time_stamp_get(VOID);
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#if (__VER__ < 8000000)
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
-#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#endif
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
@@ -269,8 +261,8 @@ void __iar_Initlocks(void);
#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
-/* Determine if the ARM architecture has the CLZ instruction. This is available on
- architectures v5 and above. If available, redefine the macro for calculating the
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
lowest bit set. */
#ifndef TX_DISABLE_INLINE
@@ -281,22 +273,22 @@ void __iar_Initlocks(void);
#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
b = (UINT) __CLZ(m); \
- b = 31 - b;
+ b = 31 - b;
#endif
#endif
#endif
-/* Define ThreadX interrupt lockout and restore macros for protection on
- access of critical kernel information. The restore interrupt macro must
- restore the interrupt posture of the running thread prior to the value
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
present prior to the disable macro. In most cases, the save area macro
is used to define a local function save area for the disable and restore
macros. */
/* First, check and see what mode the file is being compiled in. The IAR compiler
- defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
are available. Otherwise, if Thumb mode is present, we must use function calls. */
@@ -365,8 +357,8 @@ void tx_thread_vfp_disable(void);
/* Define the version ID of ThreadX. This may be utilized by the application. */
#ifdef TX_THREAD_INIT
-CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R5/IAR Version 6.4.2 *";
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R5/IAR Version 6.5.0.202601 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];
diff --git a/ports/cortex_r5/iar/readme_threadx.txt b/ports/cortex_r5/iar/readme_threadx.txt
index fd6174a7b..4d1b8b555 100644
--- a/ports/cortex_r5/iar/readme_threadx.txt
+++ b/ports/cortex_r5/iar/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R5
+ Microsoft's Azure RTOS ThreadX for Cortex-R5
Thumb & 32-bit Mode
@@ -7,10 +7,10 @@
1. Building the ThreadX run-time Library
Building the ThreadX library is easy. First, open the Azure RTOS workspace
-azure_rtos.eww. Next, make the TX project the "active project" in the
-IAR Embedded Workbench and select the "Make" button. You should observe
-assembly and compilation of a series of ThreadX source files. This
-results in the ThreadX run-time library file tx.a, which is needed by
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
the application.
@@ -20,47 +20,47 @@ The ThreadX demonstration is designed to execute under the IAR
Windows-based Cortex-R5 simulator.
Building the demonstration is easy; simply make the sample_threadx.ewp project
-the "active project" in the IAR Embedded Workbench and select the
+the "active project" in the IAR Embedded Workbench and select the
"Make" button.
-You should observe the compilation of sample_threadx.c (which is the demonstration
+You should observe the compilation of sample_threadx.c (which is the demonstration
application) and linking with tx.a. The resulting file sample_threadx.out is a
binary file that can be downloaded and executed on IAR's Cortex-R5 simulator.
3. System Initialization
-The entry point in ThreadX for the Cortex-R5 using IAR tools is at label
-?cstartup. This is defined within the IAR compiler's startup code. In
-addition, this is where all static and global preset C variable
+The entry point in ThreadX for the Cortex-R5 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
initialization processing takes place.
-The ThreadX tx_initialize_low_level.s file is responsible for setting up
-various system data structures, and a periodic timer interrupt source.
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
By default, the vector area is defined at the top of cstartup.s, which is
-a slightly modified from the base IAR file.
+a slightly modified from the base IAR file.
The _tx_initialize_low_level function inside of tx_initialize_low_level.s
-also determines the first available address for use by the application, which
-is supplied as the sole input parameter to your application definition function,
-tx_application_define. To accomplish this, a section is created in
-tx_initialize_low_level.s called FREE_MEM, which must be located after all
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
other RAM sections in memory.
4. Register Usage and Stack Frames
-The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
-scratch registers for each function. All other registers used by a C function
-must be preserved by the function. ThreadX takes advantage of this in
-situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -78,12 +78,12 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
5. Conditional Compilation Switches
@@ -92,159 +92,159 @@ The following are conditional compilation options for building the ThreadX libra
and application:
TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
- nested support. If IRQ nested
+ nested support. If IRQ nested
interrupt support is needed, this
- define should be applied to
+ define should be applied to
tx_initialize_low_level.s.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 2 in the "ThreadX User Guide"
+ Chapter 2 in the "ThreadX User Guide"
for more details.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
feature. The trace buffer is supplied at a later time
via an application call to tx_trace_enable.
- TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
- This define is only pertinent if the ThreadX library is
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
built with TX_ENABLE_EVENT_TRACE defined.
- TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
- time-stamp source defined previously. If the time-stamp
- source is 16-bits, this value should be 0xFFFF. Alternatively,
- if the time-stamp source is 32-bits, this value should be
- 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
library is built with TX_ENABLE_EVENT_TRACE defined.
6. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make it run faster, you can change the ThreadX library
-project to enable various compiler optimizations.
+project to enable various compiler optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
7. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R5
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
7.1 Vector Area
The Cortex-R5 vectors start at address zero. The demonstration system startup
-cstartup.s file contains the vectors and is loaded at address zero.
-On actual hardware platforms, this area might have to be copied to address 0.
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
7.2 IRQ ISRs
@@ -255,12 +255,12 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
7.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.s:
PUBLIC __tx_irq_handler
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -268,7 +268,7 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -281,7 +281,7 @@ __tx_irq_processing_return
7.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.s:
@@ -292,12 +292,12 @@ __tx_example_vectored_irq_handler
; /* Jump to context save to save system context. */
STMDB sp!, {r0-r3} ; Save some scratch registers
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
BL _tx_thread_vectored_context_save
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
@@ -314,24 +314,24 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables
-nesting by disabling IRQ interrupts and switching back to IRQ mode in
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
preparation for the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in a standard
+The following is an example of enabling IRQ nested interrupts in a standard
IRQ handler:
RSEG .text:CODE:NOROOT(2)
PUBLIC __tx_irq_handler
RSEG .text:CODE:NOROOT(2)
- PUBLIC __tx_irq_processing_return
+ PUBLIC __tx_irq_processing_return
__tx_irq_handler
;
; /* Jump to context save to save system context. */
@@ -339,15 +339,15 @@ __tx_irq_handler
__tx_irq_processing_return
;
; /* At this point execution is still in the IRQ mode. The CPSR, point of
-; interrupt, and all C scratch registers are available for use. Note
+; interrupt, and all C scratch registers are available for use. Note
; that IRQ interrupts are still disabled upon return from the context
; save function. */
;
-; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
; from IRQ mode with interrupts disabled. This routine switches to the
-; system mode and returns with IRQ interrupts enabled.
-;
-; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
; prior to enabling nested IRQ interrupts. */
;
BL _tx_thread_irq_nesting_start
@@ -355,7 +355,7 @@ __tx_irq_processing_return
; /* Application ISR dispatch call goes here! */
;
; /* If interrupt nesting was started earlier, the end of interrupt nesting
-; service must be called before returning to _tx_thread_context_restore.
+; service must be called before returning to _tx_thread_context_restore.
; This routine returns in processing in IRQ mode with interrupts disabled. */
;
BL _tx_thread_irq_nesting_end
@@ -366,12 +366,12 @@ __tx_irq_processing_return
7.3 FIQ Interrupts
-By default, Cortex-R5 FIQ interrupts are left alone by ThreadX. Of course, this
-means that the application is fully responsible for enabling the FIQ interrupt
-and saving/restoring any registers used in the FIQ ISR processing. To globally
-enable FIQ interrupts, the application should enable FIQ interrupts at the
-beginning of a thread or before any threads are created in tx_application_define.
-In addition, the application must ensure that no ThreadX service calls are made
+By default, Cortex-R5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of a thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
from default FIQ ISRs, which is located in tx_initialize_low_level.s.
@@ -383,21 +383,21 @@ cannot be disabled. The hardware does not support nested FIQ interrupts.
8. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
in the IRQ processing.
9. Thumb/Cortex-R5 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-R5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
diff --git a/ports/cortex_r5/iar/src/tx_iar.c b/ports/cortex_r5/iar/src/tx_iar.c
index 158738eaa..238b485ee 100644
--- a/ports/cortex_r5/iar/src/tx_iar.c
+++ b/ports/cortex_r5/iar/src/tx_iar.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** IAR Multithreaded Library Support */
/** */
@@ -37,31 +38,31 @@
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
- thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -90,7 +91,7 @@ void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
{
char _DLIB_TLS_MEMORY *p = 0;
-
+
/* Is there a current thread? */
if (_tx_thread_current_ptr)
p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
@@ -117,19 +118,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -138,35 +139,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -185,25 +186,25 @@ void __iar_system_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -215,25 +216,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -267,19 +268,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -288,35 +289,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -335,25 +336,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -365,25 +366,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -404,17 +405,17 @@ UINT status;
#include "tx_thread.h"
#include "tx_mutex.h"
-/* This implementation requires that the following macros are defined in the
+/* This implementation requires that the following macros are defined in the
tx_port.h file and is included with the following code segments:
-
+
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
#include
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
-#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
#else
-#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_2
#endif
#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
@@ -422,17 +423,17 @@ void *_tx_iar_create_per_thread_tls_area(void);
void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
void __iar_Initlocks(void);
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
#else
-#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
-#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
#endif
- This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
- application.
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
*/
@@ -456,7 +457,7 @@ void * __aeabi_read_tp(void)
TX_THREAD *thread_ptr = _tx_thread_current_ptr;
if (thread_ptr)
{
- p = thread_ptr->tx_thread_iar_tls_pointer;
+ p = thread_ptr->tx_thread_iar_tls_pointer;
}
else
{
@@ -469,9 +470,9 @@ void * __aeabi_read_tp(void)
void* _tx_iar_create_per_thread_tls_area()
{
- UINT tls_size = __iar_tls_size();
-
- /* Get memory for TLS. */
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
void *p = malloc(tls_size);
/* Initialize TLS-area and run constructors for objects in TLS */
@@ -483,7 +484,7 @@ void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
{
/* Destroy objects living in TLS */
__call_thread_dtors();
- free(tls_ptr);
+ free(tls_ptr);
}
#ifndef _MAX_LOCK
@@ -517,19 +518,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_system_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -538,35 +539,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_system_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_system_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -582,28 +583,28 @@ void __iar_system_Mtxdst(__iar_Rmtx *m)
void __iar_system_Mtxlock(__iar_Rmtx *m)
{
if (*m)
- {
+ {
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -616,25 +617,25 @@ void __iar_system_Mtxunlock(__iar_Rmtx *m)
{
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_system_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_system_lock_isr_caller++;
}
@@ -675,19 +676,19 @@ TX_MUTEX *mutex_ptr;
/* Setup a pointer to the start of the next free mutex. */
mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
-
+
/* Check for wrap-around on the next free mutex. */
if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
{
-
+
/* Yes, set the free index back to 0. */
__tx_iar_file_lock_next_free_mutex = 0;
}
-
+
/* Is this mutex free? */
if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
{
-
+
/* Yes, this mutex is free, get out of the loop! */
break;
}
@@ -696,35 +697,35 @@ TX_MUTEX *mutex_ptr;
/* Determine if a free mutex was found. */
if (i >= _MAX_LOCK)
{
-
+
/* Error! No more free mutexes! */
-
+
/* Increment the no mutexes error counter. */
__tx_iar_file_lock_no_mutexes++;
-
+
/* Set return pointer to NULL. */
*m = TX_NULL;
-
+
/* Return. */
return;
}
-
+
/* Now create the ThreadX mutex for the IAR library. */
status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
-
+
/* Determine if the creation was successful. */
if (status == TX_SUCCESS)
{
-
+
/* Yes, successful creation, return mutex pointer. */
*m = (VOID *) mutex_ptr;
}
else
{
-
+
/* Increment the internal error counter. */
__tx_iar_file_lock_internal_errors++;
-
+
/* Return a NULL pointer to indicate an error. */
*m = TX_NULL;
}
@@ -743,25 +744,25 @@ void __iar_file_Mtxlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex locks are only available from initialization and
+ /* Determine the caller's context. Mutex locks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Get the mutex. */
status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
@@ -773,25 +774,25 @@ void __iar_file_Mtxunlock(__iar_Rmtx *m)
UINT status;
- /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
threads. */
if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
{
-
+
/* Release the mutex. */
status = _tx_mutex_put((TX_MUTEX *) *m);
-
+
/* Check the status of the mutex release. */
if (status)
{
-
+
/* Internal error, increment the counter. */
__tx_iar_file_lock_internal_errors++;
}
}
else
{
-
+
/* Increment the ISR caller error. */
__tx_iar_file_lock_isr_caller++;
}
diff --git a/ports/cortex_r5/iar/src/tx_thread_context_restore.s b/ports/cortex_r5/iar/src/tx_thread_context_restore.s
index 62f098ebc..a035dc5e8 100644
--- a/ports/cortex_r5/iar/src/tx_thread_context_restore.s
+++ b/ports/cortex_r5/iar/src/tx_thread_context_restore.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -47,44 +47,38 @@ THUMB_MASK DEFINE 0x20 ; Thumb bit mask
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_restore Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function restores the interrupt context if it is processing a */
-;/* nested interrupt. If not, it returns to the interrupt thread if no */
-;/* preemption is necessary. Otherwise, if preemption is necessary or */
-;/* if no thread was running, the function returns to the scheduler. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling routine */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs Interrupt Service Routines */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_restore(VOID)
@@ -112,13 +106,13 @@ _tx_thread_context_restore
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3] ; Pickup system state
SUB r2, r2, #1 ; Decrement the counter
- STR r2, [r3] ; Store the counter
+ STR r2, [r3] ; Store the counter
CMP r2, #0 ; Was this the first interrupt?
BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
;
; /* Interrupts are nested. */
;
-; /* Just recover the saved registers and return to the point of
+; /* Just recover the saved registers and return to the point of
; interrupt. */
;
LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
@@ -181,7 +175,7 @@ __tx_thread_preempt_restore
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
-
+
#ifdef __ARMVFP__
LDR r2, [r0, #144] ; Pickup the VFP enabled flag
CMP r2, #0 ; Is the VFP enabled?
@@ -191,7 +185,7 @@ __tx_thread_preempt_restore
VSTMDB sp!, {D0-D15} ; Save D0-D15
_tx_skip_irq_vfp_save
#endif
-
+
MOV r3, #1 ; Build interrupt stack type
STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
STR sp, [r0, #8] ; Save stack pointer in thread control
@@ -237,7 +231,7 @@ __tx_thread_idle_system_restore
; /* Just return back to the scheduler! */
;
CPS #SVC_MODE ; Enter SVC mode
-
+
B _tx_thread_schedule ; Return to scheduler
;}
;
diff --git a/ports/cortex_r5/iar/src/tx_thread_context_save.s b/ports/cortex_r5/iar/src/tx_thread_context_save.s
index ce3a27d7a..acd05d0a4 100644
--- a/ports/cortex_r5/iar/src/tx_thread_context_save.s
+++ b/ports/cortex_r5/iar/src/tx_thread_context_save.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -36,43 +36,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_context_save Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_context_save(VOID)
@@ -89,7 +83,7 @@ _tx_thread_context_save
; if (_tx_thread_system_state++)
; {
;
- STMDB sp!, {r0-r3} ; Save some working registers
+ STMDB sp!, {r0-r3} ; Save some working registers
LDR r3, =_tx_thread_system_state ; Pickup address of system state var
LDR r2, [r3, #0] ; Pickup system state
CMP r2, #0 ; Is this the first interrupt?
@@ -104,7 +98,7 @@ _tx_thread_context_save
; calling ISR. */
;
MRS r0, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} ; Store other registers
;
; /* Return to the ISR. */
@@ -120,7 +114,7 @@ _tx_thread_context_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
__tx_thread_not_nested_save
; }
@@ -134,13 +128,13 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Save minimal context of interrupted thread. */
;
MRS r2, SPSR ; Pickup saved SPSR
- SUB lr, lr, #4 ; Adjust point of interrupt
+ SUB lr, lr, #4 ; Adjust point of interrupt
STMDB sp!, {r2, r10, r12, lr} ; Store other registers
;
; /* Save the current stack pointer in the thread's control block. */
@@ -160,7 +154,7 @@ __tx_thread_not_nested_save
POP {lr} ; Recover ISR lr
#endif
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
; else
@@ -170,7 +164,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
@@ -185,7 +179,7 @@ __tx_thread_idle_system_save
#endif
ADD sp, sp, #16 ; Recover saved registers
- B __tx_irq_processing_return ; Continue IRQ processing
+ B __tx_irq_processing_return ; Continue IRQ processing
;
; }
;}
diff --git a/ports/cortex_r5/iar/src/tx_thread_interrupt_control.s b/ports/cortex_r5/iar/src/tx_thread_interrupt_control.s
index 6a7768c91..423ba1679 100644
--- a/ports/cortex_r5/iar/src/tx_thread_interrupt_control.s
+++ b/ports/cortex_r5/iar/src/tx_thread_interrupt_control.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -32,42 +32,36 @@
INT_MASK DEFINE 0x80 ; Interrupt bit mask
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_control Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for changing the interrupt lockout */
-;/* posture of the system. */
-;/* */
-;/* INPUT */
-;/* */
-;/* new_posture New interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_control(UINT new_posture)
@@ -87,7 +81,7 @@ _tx_thread_interrupt_control
;
MSR CPSR_cxsf, r1 ; Setup new CPSR
AND r0, r3, #INT_MASK ; Return previous interrupt mask
-
+
BX lr ; Return to caller
;
;}
diff --git a/ports/cortex_r5/iar/src/tx_thread_interrupt_disable.s b/ports/cortex_r5/iar/src/tx_thread_interrupt_disable.s
index 687a56e6f..c7520107f 100644
--- a/ports/cortex_r5/iar/src/tx_thread_interrupt_disable.s
+++ b/ports/cortex_r5/iar/src/tx_thread_interrupt_disable.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -32,41 +32,35 @@ DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_disable Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for disabling interrupts */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;UINT _tx_thread_interrupt_disable(VOID)
diff --git a/ports/cortex_r5/iar/src/tx_thread_interrupt_restore.s b/ports/cortex_r5/iar/src/tx_thread_interrupt_restore.s
index 3a60ca6da..def631f20 100644
--- a/ports/cortex_r5/iar/src/tx_thread_interrupt_restore.s
+++ b/ports/cortex_r5/iar/src/tx_thread_interrupt_restore.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -28,42 +28,36 @@
;#include "tx_thread.h"
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_interrupt_restore Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is responsible for restoring interrupts to the state */
-;/* returned by a previous _tx_thread_interrupt_disable call. */
-;/* */
-;/* INPUT */
-;/* */
-;/* old_posture Old interrupt lockout posture */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* Application Code */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is responsible for restoring interrupts to the state */
+;/* returned by a previous _tx_thread_interrupt_disable call. */
+;/* */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
;/* */
;/**************************************************************************/
;void _tx_thread_interrupt_restore(UINT old_posture)
diff --git a/ports/cortex_r5/iar/src/tx_thread_irq_nesting_end.s b/ports/cortex_r5/iar/src/tx_thread_irq_nesting_end.s
index f2153ae6f..b6a9908f2 100644
--- a/ports/cortex_r5/iar/src/tx_thread_irq_nesting_end.s
+++ b/ports/cortex_r5/iar/src/tx_thread_irq_nesting_end.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,51 +33,45 @@
IRQ_MODE DEFINE 0x12 ; IRQ mode
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_end Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
-;/* processing from system mode back to IRQ mode prior to the ISR */
-;/* calling _tx_thread_context_restore. Note that this function */
-;/* assumes the system stack pointer is in the same position after */
-;/* nesting start function was called. */
-;/* */
-;/* This function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts disabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
-;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_end(VOID)
diff --git a/ports/cortex_r5/iar/src/tx_thread_irq_nesting_start.s b/ports/cortex_r5/iar/src/tx_thread_irq_nesting_start.s
index e81f900ab..29137f8a5 100644
--- a/ports/cortex_r5/iar/src/tx_thread_irq_nesting_start.s
+++ b/ports/cortex_r5/iar/src/tx_thread_irq_nesting_start.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,48 +33,42 @@
SYS_MODE DEFINE 0x1F ; System mode
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_irq_nesting_start Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is called by the application from IRQ mode after */
-;/* _tx_thread_context_save has been called and switches the IRQ */
-;/* processing to the system mode so nested IRQ interrupt processing */
-;/* is possible (system mode has its own "lr" register). Note that */
-;/* this function assumes that the system mode stack pointer was setup */
-;/* during low-level initialization (tx_initialize_low_level.s). */
-;/* */
-;/* This function returns with IRQ interrupts enabled. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_irq_nesting_start(VOID)
diff --git a/ports/cortex_r5/iar/src/tx_thread_schedule.s b/ports/cortex_r5/iar/src/tx_thread_schedule.s
index fc88ce8fe..4152a2cbf 100644
--- a/ports/cortex_r5/iar/src/tx_thread_schedule.s
+++ b/ports/cortex_r5/iar/src/tx_thread_schedule.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -37,45 +37,39 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_schedule Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function waits for a thread control block pointer to appear in */
-;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
-;/* in the variable, the corresponding thread is resumed. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_initialize_kernel_enter ThreadX entry function */
-;/* _tx_thread_system_return Return to system from thread */
-;/* _tx_thread_context_restore Restore thread's context */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
;/* */
;/**************************************************************************/
;VOID _tx_thread_schedule(VOID)
@@ -104,7 +98,7 @@ __tx_thread_schedule_loop
;
; }
; while(_tx_thread_execute_ptr == TX_NULL);
-;
+;
; /* Yes! We have a thread to execute. Lockout interrupts and
; transfer control to it. */
;
@@ -113,7 +107,7 @@ __tx_thread_schedule_loop
; /* Setup the current thread pointer. */
; _tx_thread_current_ptr = _tx_thread_execute_ptr;
;
- LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
STR r0, [r1, #0] ; Setup current thread pointer
;
; /* Increment the run count for this thread. */
@@ -127,7 +121,7 @@ __tx_thread_schedule_loop
; /* Setup time-slice, if present. */
; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
;
- LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
; variable
LDR sp, [r0, #8] ; Switch stack pointers
STR r3, [r2, #0] ; Setup time-slice
@@ -184,7 +178,7 @@ _tx_skip_solicited_vfp_restore:
#ifdef __ARMVFP__
PUBLIC tx_thread_vfp_enable
CODE32
-tx_thread_vfp_enable??rA
+tx_thread_vfp_enable??rA
tx_thread_vfp_enable
MRS r2, CPSR ; Pickup the CPSR
CPSID i ; Disable IRQ interrupts
@@ -200,7 +194,7 @@ __tx_no_thread_to_enable:
PUBLIC tx_thread_vfp_disable
CODE32
-tx_thread_vfp_disable??rA
+tx_thread_vfp_disable??rA
tx_thread_vfp_disable
MRS r2, CPSR ; Pickup the CPSR
CPSID i ; Disable IRQ interrupts
diff --git a/ports/cortex_r5/iar/src/tx_thread_stack_build.s b/ports/cortex_r5/iar/src/tx_thread_stack_build.s
index 3b9dbc49b..264ee4c33 100644
--- a/ports/cortex_r5/iar/src/tx_thread_stack_build.s
+++ b/ports/cortex_r5/iar/src/tx_thread_stack_build.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -33,58 +33,52 @@ SVC_MODE DEFINE 0x13 ; SVC mode
CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints enabled
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_stack_build Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function builds a stack frame on the supplied thread's stack. */
-;/* The stack frame results in a fake interrupt return to the supplied */
-;/* function pointer. */
-;/* */
-;/* INPUT */
-;/* */
-;/* thread_ptr Pointer to thread control blk */
-;/* function_ptr Pointer to return function */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* _tx_thread_create Create thread service */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function builds a stack frame on the supplied thread's stack. */
+;/* The stack frame results in a fake interrupt return to the supplied */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
+;/* thread_ptr Pointer to thread control blk */
+;/* function_ptr Pointer to return function */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
;/* */
;/**************************************************************************/
;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
;{
RSEG .text:CODE:NOROOT(2)
PUBLIC _tx_thread_stack_build
-
+
ARM
_tx_thread_stack_build
;
-;
+;
; /* Build a fake interrupt frame. The form of the fake interrupt stack
; on the Cortex-R5 should look like the following after it is built:
-;
+;
; Stack Top: 1 Interrupt stack frame type
; CPSR Initial value for CPSR
; a1 (r0) Initial value for a1
diff --git a/ports/cortex_r5/iar/src/tx_thread_system_return.s b/ports/cortex_r5/iar/src/tx_thread_system_return.s
index 58e5d0728..6ceabc46b 100644
--- a/ports/cortex_r5/iar/src/tx_thread_system_return.s
+++ b/ports/cortex_r5/iar/src/tx_thread_system_return.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -37,44 +37,38 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_system_return Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function is target processor specific. It is used to transfer */
-;/* control from a thread back to the ThreadX system. Only a */
-;/* minimal context is saved since the compiler assumes temp registers */
-;/* are going to get slicked by a function call anyway. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_thread_schedule Thread scheduling loop */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ThreadX components */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
;/* */
;/**************************************************************************/
;VOID _tx_thread_system_return(VOID)
@@ -107,7 +101,7 @@ _tx_skip_solicited_vfp_save:
MOV r0, #0 ; Build a solicited stack type
STMDB sp!, {r0-r1} ; Save type and CPSR
-;
+;
;
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
;
diff --git a/ports/cortex_r5/iar/src/tx_thread_vectored_context_save.s b/ports/cortex_r5/iar/src/tx_thread_vectored_context_save.s
index 4029bbb41..3a5ed54a1 100644
--- a/ports/cortex_r5/iar/src/tx_thread_vectored_context_save.s
+++ b/ports/cortex_r5/iar/src/tx_thread_vectored_context_save.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Thread */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
@@ -35,43 +35,37 @@
EXTERN _tx_execution_isr_enter
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_thread_vectored_context_save Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function saves the context of an executing thread in the */
-;/* beginning of interrupt processing. The function also ensures that */
-;/* the system stack is used upon return to the calling ISR. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* None */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* ISRs */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
;/* */
;/**************************************************************************/
;VOID _tx_thread_vectored_context_save(VOID)
@@ -128,7 +122,7 @@ __tx_thread_not_nested_save
LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
LDR r0, [r1, #0] ; Pickup current thread pointer
CMP r0, #0 ; Is it NULL?
- BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
; scheduling loop - nothing needs saving!
;
; /* Note: Minimal context of interrupted thread is already saved. */
@@ -160,7 +154,7 @@ __tx_thread_idle_system_save
;
; /* Interrupt occurred in the scheduling loop. */
;
-; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
; processing. */
;
MOV r10, #0 ; Clear stack limit
diff --git a/ports/cortex_r5/iar/src/tx_timer_interrupt.s b/ports/cortex_r5/iar/src/tx_timer_interrupt.s
index 85274fa21..b3935abce 100644
--- a/ports/cortex_r5/iar/src/tx_timer_interrupt.s
+++ b/ports/cortex_r5/iar/src/tx_timer_interrupt.s
@@ -1,23 +1,23 @@
;/***************************************************************************
-; * Copyright (c) 2024 Microsoft Corporation
-; *
+; * Copyright (c) 2024 Microsoft Corporation
+; *
; * This program and the accompanying materials are made available under the
; * terms of the MIT License which is available at
; * https://opensource.org/licenses/MIT.
-; *
+; *
; * SPDX-License-Identifier: MIT
; **************************************************************************/
;
;
-;/**************************************************************************/
-;/**************************************************************************/
-;/** */
-;/** ThreadX Component */
-;/** */
-;/** Timer */
-;/** */
-;/**************************************************************************/
-;/**************************************************************************/
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Timer */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
;
;#define TX_SOURCE_CODE
;
@@ -43,46 +43,40 @@
;
;
;
-;/**************************************************************************/
-;/* */
-;/* FUNCTION RELEASE */
-;/* */
-;/* _tx_timer_interrupt Cortex-R5/IAR */
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt Cortex-R5/IAR */
;/* 6.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
;/* */
;/* DESCRIPTION */
-;/* */
-;/* This function processes the hardware timer interrupt. This */
-;/* processing includes incrementing the system clock and checking for */
-;/* time slice and/or timer expiration. If either is found, the */
-;/* interrupt context save/restore functions are called along with the */
-;/* expiration functions. */
-;/* */
-;/* INPUT */
-;/* */
-;/* None */
-;/* */
-;/* OUTPUT */
-;/* */
-;/* None */
-;/* */
-;/* CALLS */
-;/* */
-;/* _tx_timer_expiration_process Timer expiration processing */
-;/* _tx_thread_time_slice Time-slice interrupted thread */
-;/* */
-;/* CALLED BY */
-;/* */
-;/* interrupt vector */
-;/* */
-;/* RELEASE HISTORY */
-;/* */
-;/* DATE NAME DESCRIPTION */
;/* */
-;/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
;/* */
;/**************************************************************************/
;VOID _tx_timer_interrupt(VOID)
@@ -108,7 +102,7 @@ _tx_timer_interrupt
; if (_tx_timer_time_slice)
; {
;
- LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
LDR r2, [r3, #0] ; Pickup time-slice
CMP r2, #0 ; Is it non-active?
BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
@@ -226,13 +220,13 @@ __tx_timer_dont_activate
; if (_tx_timer_expired_time_slice)
; {
;
- LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
LDR r2, [r3, #0] ; Pickup the actual flag
CMP r2, #0 ; See if the flag is set
BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
;
; /* Time slice interrupted thread. */
-; _tx_thread_time_slice();
+; _tx_thread_time_slice();
BL _tx_thread_time_slice ; Call time-slice processing
;
diff --git a/ports/cortex_r7/ghs/example_build/tx_initialize_low_level.arm b/ports/cortex_r7/ghs/example_build/tx_initialize_low_level.arm
index a8cbf83aa..c3b9f4207 100644
--- a/ports/cortex_r7/ghs/example_build/tx_initialize_low_level.arm
+++ b/ports/cortex_r7/ghs/example_build/tx_initialize_low_level.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/inc/tx_el.h b/ports/cortex_r7/ghs/inc/tx_el.h
index b8926921c..72e5bbe35 100644
--- a/ports/cortex_r7/ghs/inc/tx_el.h
+++ b/ports/cortex_r7/ghs/inc/tx_el.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -36,12 +37,6 @@
/* EventAnalyzer. It is assumed that tx_api.h and tx_port.h have */
/* already been included. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
#ifndef TX_EL_H
diff --git a/ports/cortex_r7/ghs/inc/tx_port.h b/ports/cortex_r7/ghs/inc/tx_port.h
index c72beba61..11e059370 100644
--- a/ports/cortex_r7/ghs/inc/tx_port.h
+++ b/ports/cortex_r7/ghs/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -42,15 +43,6 @@
/* own special types that can be mapped to actual data types by this */
/* file to guarantee consistency in the interface and functionality. */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 01-31-2022 Bhupendra Naphade Modified comment(s),updated */
-/* macro definition, */
-/* resulting in version 6.1.10 */
-/* */
/**************************************************************************/
#ifndef TX_PORT_H
@@ -394,7 +386,7 @@ void tx_thread_vfp_disable(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) 2024 Microsoft Corporation. * ThreadX Cortex-R7/Green Hills Version 6.4.2 *";
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX Cortex-R7/Green Hills Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/cortex_r7/ghs/readme_threadx.txt b/ports/cortex_r7/ghs/readme_threadx.txt
index 6f498f110..427d29f31 100644
--- a/ports/cortex_r7/ghs/readme_threadx.txt
+++ b/ports/cortex_r7/ghs/readme_threadx.txt
@@ -1,19 +1,19 @@
- Microsoft's Azure RTOS ThreadX for Cortex-R7
+ Microsoft's Azure RTOS ThreadX for Cortex-R7
Using the Green Hills Software Tools
1. Open the ThreadX Project Workspace
-In order to build the ThreadX library and the ThreadX demonstration first load
-the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
-"example_build" directory.
+In order to build the ThreadX library and the ThreadX demonstration first load
+the Azure RTOS Workspace azure_rtos_workspace.gpj, which is located inside the
+"example_build" directory.
2. Building the ThreadX run-time Library
-Building the ThreadX library is easy; simply select the MULTI project file
-tx.gpj and then select the build button. You should now observe the
-compilation and assembly of the ThreadX library. This project build produces
+Building the ThreadX library is easy; simply select the MULTI project file
+tx.gpj and then select the build button. You should now observe the
+compilation and assembly of the ThreadX library. This project build produces
the ThreadX library file tx.a.
@@ -21,55 +21,55 @@ the ThreadX library file tx.a.
The ThreadX demonstration is designed to execute under the MULTI environment
on the Green Hills Cortex-R7 simulator. The instructions that follow describe
-how to get the ThreadX evaluation running under the MULTI Cortex-R7 simulation
+how to get the ThreadX evaluation running under the MULTI Cortex-R7 simulation
environment.
-Building the demonstration is easy; simply select the MULTI project file
-sample_threadx.gpj. At this point, select the "Project Build" button and observe
-the compilation, assembly, and linkage of the ThreadX demonstration application.
+Building the demonstration is easy; simply select the MULTI project file
+sample_threadx.gpj. At this point, select the "Project Build" button and observe
+the compilation, assembly, and linkage of the ThreadX demonstration application.
-After the demonstration is built, invoke the MULTI ARM simulator by selecting
-the simulator connection from within the sample_threadx.con connection file.
-Once connected to the simulator, select the "Debug" button. You should now
-observe the main function of sample_threadx.c.
+After the demonstration is built, invoke the MULTI ARM simulator by selecting
+the simulator connection from within the sample_threadx.con connection file.
+Once connected to the simulator, select the "Debug" button. You should now
+observe the main function of sample_threadx.c.
At this point, you should setup a simulated timer interrupt for ThreadX
by entering "timer 9999 irq" in the "target" window of the debugger.
-You are now ready to execute the ThreadX demonstration system. Select
-breakpoints and data watches to observe the execution of the sample_threadx.c
+You are now ready to execute the ThreadX demonstration system. Select
+breakpoints and data watches to observe the execution of the sample_threadx.c
application.
4. EventAnalyzer Demonstration
-To build a demonstration system that also logs events for the MULTI EventAnalyzer,
-perform the same steps as the regular demo, except build the ThreadX library with
-txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
-The resulting image will log all system events, which can then be displayed by the
+To build a demonstration system that also logs events for the MULTI EventAnalyzer,
+perform the same steps as the regular demo, except build the ThreadX library with
+txe.gpj file and use the sample_threadx_el.gpj build file to build the demonstration.
+The resulting image will log all system events, which can then be displayed by the
MULTI EventAnalyzer.
5. System Initialization
-The system entry point using the Green Hills tools is at the label _start.
-This is defined within the crt0.arm file supplied by Green Hills. In addition,
-this is where all static and global preset C variable initialization
+The system entry point using the Green Hills tools is at the label _start.
+This is defined within the crt0.arm file supplied by Green Hills. In addition,
+this is where all static and global preset C variable initialization
processing is called from.
After the Green Hills startup function returns, ThreadX initialization is
called. The main initialization function is _tx_initialize_low_level and
-is located in the file tx_initialize_low_level.arm. This function is responsible
-for setting up various system data structures, interrupt vectors, and the
+is located in the file tx_initialize_low_level.arm. This function is responsible
+for setting up various system data structures, interrupt vectors, and the
periodic timer interrupt source of ThreadX.
-In addition, _tx_initialize_low_level determines where the first available
+In addition, _tx_initialize_low_level determines where the first available
RAM memory address is located. This address is supplied to tx_application_define.
-By default, the first available RAM memory address is assumed to start at the
-beginning of the ThreadX section .free_mem. If changes are made to the
-sample_threadx.ld file, the .free_mem section should remain the last allocated
-section in the main RAM area. The starting address of this section is passed
+By default, the first available RAM memory address is assumed to start at the
+beginning of the ThreadX section .free_mem. If changes are made to the
+sample_threadx.ld file, the .free_mem section should remain the last allocated
+section in the main RAM area. The starting address of this section is passed
to tx_application_define.
@@ -87,27 +87,27 @@ The following defines and their associated action are as follows:
TX_ENABLE_FIQ_NESTING If defined, this brings in special FIQ
interrupt nesting logic into the ThreadX
library. This define should be applied
- to the entire ThreadX library and the
+ to the entire ThreadX library and the
define TX_ENABLE_FIQ_SUPPORT should also
be defined.
TX_ENABLE_FIQ_SUPPORT If defined, this brings in FIQ context
save and restore logic necessary for
applications to call ThreadX services from
- FIQ interrupt handlers. This define
- should be applied to the entire ThreadX
+ FIQ interrupt handlers. This define
+ should be applied to the entire ThreadX
library.
TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
this define causes basic ThreadX error
checking to be disabled. Please see
- Chapter 4 in the "ThreadX User Guide"
+ Chapter 4 in the "ThreadX User Guide"
for more details.
TX_ENABLE_EVENT_LOGGING This define enables event logging for any
or all of the ThreadX source code. If this
- option is used anywhere, the tx_initialize_high_level.c
+ option is used anywhere, the tx_initialize_high_level.c
file must be compiled with it as well, since this
is where the event log is initialized.
@@ -119,121 +119,121 @@ The following defines and their associated action are as follows:
If this is enabled, run-time filtering logic
is added to the event logging code.
- TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
- Legal values range from 32 through
- 1024 (inclusive) and MUST be evenly divisible
- by 32. Increasing the number of priority levels
- supported increases the RAM usage by 128 bytes
- for every group of 32 priorities. However, there
- is only a negligible effect on performance. By
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
default, this value is set to 32 priority levels.
- TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
- used for error checking when threads are created.
- The default value is port-specific and is found
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
in tx_port.h.
- TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
- ThreadX timer thread. This thread processes all
- thread sleep requests as well as all service call
- timeouts. In addition, all application timer callback
- routines are invoked from this context. The default
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
value is port-specific and is found in tx_port.h.
- TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
- thread. The default value is priority 0 - the highest
- priority in ThreadX. The default value is defined
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
in tx_port.h.
- TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
- timer thread for ThreadX. This results in improved
- performance on timer events and smaller RAM requirements
- because the timer stack and control block are no
- longer needed. However, using this option moves all
- the timer expiration processing to the timer ISR level.
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
By default, this option is not defined.
- TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
- timers in-line instead of using a function call. This
- improves performance but slightly increases code size.
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
By default, this option is not defined.
- TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
- thread's stack is disabled. By default, this option is
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
not defined.
- TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
- which includes analysis of how much stack has been used and
- examination of data pattern "fences" before and after the
- stack area. If a stack error is detected, the registered
- application stack error handler is called. This option does
- result in slightly increased overhead and code size. Please
- review the tx_thread_stack_error_notify API for more information.
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
By default, this option is not defined.
- TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
- and slightly reduces code size and improves performance. Of course,
- the preemption-threshold capabilities are no longer available.
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
By default, this option is not defined.
- TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
- global C data structures to zero. This should only be used if
- the compiler's initialization code sets all un-initialized
- C global data to zero. Using this option slightly reduces
- code size and improves performance during initialization.
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
By default, this option is not defined.
- TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
- ThreadX objects. Using this option slightly reduces code size
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
and improves performance.
- TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on block pools. By default, this option is
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
not defined.
- TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on byte pools. By default, this option is
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
not defined.
- TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on event flags groups. By default, this option
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
is not defined.
- TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on mutexes. By default, this option is
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
not defined.
- TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on queues. By default, this option is
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
not defined.
- TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on semaphores. By default, this option is
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
not defined.
- TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on threads. By default, this option is
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
not defined.
- TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
- information on timers. By default, this option is
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
not defined.
7. Register Usage and Stack Frames
-The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
-are scratch registers for each function. All other registers used by a C
-function must be preserved by the function. ThreadX takes advantage of this
-in situations where a context switch happens as a result of making a ThreadX
-service call (which is itself a C function). In such cases, the saved
+The Green Hills compiler assumes that registers r0-r3 (a1-a4) and r12 (ip)
+are scratch registers for each function. All other registers used by a C
+function must be preserved by the function. ThreadX takes advantage of this
+in situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
context of a thread is only the non-scratch registers.
The following defines the saved context stack frames for context switches
that occur as a result of interrupt handling or from thread-level API calls.
All suspended threads have one of these two types of stack frames. The top
-of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
associated thread control block TX_THREAD.
@@ -251,40 +251,40 @@ associated thread control block TX_THREAD.
0x20 r6 (v3) r10 (v7)
0x24 r7 (v4) r11 (fp)
0x28 r8 (v5) r14 (lr)
- 0x2C r9 (v6)
- 0x30 r10 (v7)
- 0x34 r11 (fp)
- 0x38 r12 (ip)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
0x3C r14 (lr)
- 0x40 PC
+ 0x40 PC
8. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
performance. To make ThreadX run faster, you can change the tx.gpj project
-to disable debug information and enable the desired optimizations.
+to disable debug information and enable the desired optimizations.
-In addition, you can eliminate the ThreadX basic API error checking by
-compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
-defined before tx_api.h is included.
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined before tx_api.h is included.
9. Interrupt Handling
ThreadX provides complete and high-performance interrupt handling for Cortex-R7
-targets. There are a certain set of requirements that are defined in the
+targets. There are a certain set of requirements that are defined in the
following sub-sections:
9.1 Vector Area
The Cortex-R7 vectors start at address zero. The demonstration system reset.arm
-file contains the reset section (which contains all the ARM vectors) and is
+file contains the reset section (which contains all the ARM vectors) and is
typically loaded at address zero. On actual hardware platforms, this section
-might have to be copied to address 0.
+might have to be copied to address 0.
9.2 IRQ ISRs
@@ -294,13 +294,13 @@ IRQ interrupts. The following sub-sections define the IRQ capabilities.
9.2.1 Standard IRQ ISRs
-The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
-interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
is the default IRQ handler defined in tx_initialize_low_level.arm:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -308,7 +308,7 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -321,7 +321,7 @@ __tx_irq_processing_return:
9.2.2 Vectored IRQ ISRs
The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
-by the particular implementation. The following is an example IRQ handler defined in
+by the particular implementation. The following is an example IRQ handler defined in
tx_initialize_low_level.arm:
.globl __tx_irq_example_handler
@@ -331,12 +331,12 @@ __tx_irq_example_handler:
STMDB sp!, {r0-r3} # Save some scratch registers
MRS r0, SPSR # Pickup saved SPSR
- SUB lr, lr, #4 # Adjust point of interrupt
+ SUB lr, lr, #4 # Adjust point of interrupt
STMDB sp!, {r0, r10, r12, lr} # Store other scratch registers
BL _tx_thread_vectored_context_save # Call the vectored IRQ context save
/* At this point execution is still in the IRQ mode. The CPSR, point of
- interrupt, and all C scratch registers are available for use. Note
+ interrupt, and all C scratch registers are available for use. Note
that IRQ interrupts are still disabled upon return from the context
save function. */
@@ -353,22 +353,22 @@ IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
defined. With this defined, two new IRQ interrupt management services are
available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
These function should be called between the IRQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_irq_nesting_start and
-_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
-longer required, calling the _tx_thread_irq_nesting_end service disables nesting
-by disabling IRQ interrupts and switching back to IRQ mode in preparation for
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables nesting
+by disabling IRQ interrupts and switching back to IRQ mode in preparation for
the IRQ context restore service.
-The following is an example of enabling IRQ nested interrupts in the
+The following is an example of enabling IRQ nested interrupts in the
typical IRQ handler:
.globl __tx_irq_handler
- .globl __tx_irq_processing_return
+ .globl __tx_irq_processing_return
__tx_irq_handler:
/* Jump to context save to save system context. */
@@ -376,10 +376,10 @@ __tx_irq_handler:
__tx_irq_processing_return:
/* Enable nested IRQ interrupts. NOTE: Since this service returns
- with IRQ interrupts enabled, all IRQ interrupt sources must be
+ with IRQ interrupts enabled, all IRQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_irq_nesting_start
-
+
/* Application ISR call(s) go here! */
/* Disable nested IRQ interrupts. The mode is switched back to
@@ -392,9 +392,9 @@ __tx_irq_processing_return:
9.3 FIQ Interrupts
-By default, Cortex-R7 FIQ interrupts are left completely enabled by ThreadX.
-Of course, this means that the application is fully responsible for
-saving/restoring any registers used in the FIQ ISR processing. In addition,
+By default, Cortex-R7 FIQ interrupts are left completely enabled by ThreadX.
+Of course, this means that the application is fully responsible for
+saving/restoring any registers used in the FIQ ISR processing. In addition,
no ThreadX service calls are allowed from the default FIQ ISRs. The default
FIQ interrupt shell is located in tx_initialize_low_level.arm.
@@ -403,7 +403,7 @@ FIQ interrupt shell is located in tx_initialize_low_level.arm.
Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
-handlers defined previously. The following is default FIQ handler
+handlers defined previously. The following is default FIQ handler
defined in tx_initialize_low_level.arm:
@@ -431,18 +431,18 @@ FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
defined. With this defined, two new FIQ interrupt management services are
available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
These function should be called between the FIQ context save and restore
-calls.
+calls.
-Execution between the calls to _tx_thread_fiq_nesting_start and
-_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
-The SYS mode stack is used during the SYS mode operation, which was
-setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
-required, calling the _tx_thread_fiq_nesting_end service disables nesting by
-disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.arm. When nested FIQ interrupts are no longer
+required, calling the _tx_thread_fiq_nesting_end service disables nesting by
+disabling FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
context restore service.
-The following is an example of enabling FIQ nested interrupts in the
+The following is an example of enabling FIQ nested interrupts in the
typical FIQ handler:
@@ -458,7 +458,7 @@ __tx_fiq_processing_return:
interrupt, and all C scratch registers are available for use. */
/* Enable nested FIQ interrupts. NOTE: Since this service returns
- with FIQ interrupts enabled, all FIQ interrupt sources must be
+ with FIQ interrupts enabled, all FIQ interrupt sources must be
cleared prior to calling this service. */
BL _tx_thread_fiq_nesting_start
@@ -475,29 +475,29 @@ __tx_fiq_processing_return:
10. ThreadX Timer Interrupt
-ThreadX requires a periodic interrupt source to manage all time-slicing,
-thread sleeps, timeouts, and application timers. Without such a timer
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
interrupt source, these services are not functional. However, all other
ThreadX services are operational without a periodic timer source.
-To add the timer interrupt processing, simply make a call to
+To add the timer interrupt processing, simply make a call to
_tx_timer_interrupt in the IRQ processing. An example of this can be
found in the file tx_initialize_low_level.arm.
11. Thumb/Cortex-R7 Mixed Mode
-By default, ThreadX is setup for running in Cortex-R7 32-bit mode. This is
-also true for the demonstration system. It is possible to build any
+By default, ThreadX is setup for running in Cortex-R7 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
ThreadX file and/or the application in Thumb mode. The only exception
-to this is the file tx_thread_shell_entry.c. This file must always be
+to this is the file tx_thread_shell_entry.c. This file must always be
built in 32-bit mode.
12. VFP Support
By default, VFP support is disabled for each thread. If saving the context of the VFP registers
-is needed, the following API call must be made from the context of the application thread - before
+is needed, the following API call must be made from the context of the application thread - before
the VFP usage:
void tx_thread_vfp_enable(void);
@@ -520,7 +520,7 @@ information associated with this specific port of ThreadX:
04-02-2021 Release 6.1.6 changes:
tx_port.h Updated macro definition
-05/19/2020 Initial ThreadX version of Cortex-R7/Green Hills port.
+05/19/2020 Initial ThreadX version of Cortex-R7/Green Hills port.
Copyright(c) 1996-2020 Microsoft Corporation
diff --git a/ports/cortex_r7/ghs/src/tx_el.c b/ports/cortex_r7/ghs/src/tx_el.c
index 365622cdf..b5d3b8b73 100644
--- a/ports/cortex_r7/ghs/src/tx_el.c
+++ b/ports/cortex_r7/ghs/src/tx_el.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -82,12 +83,6 @@ UINT _tx_thread_interrupt_control(UINT new_posture);
/* */
/* Application Code */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
diff --git a/ports/cortex_r7/ghs/src/tx_thread_context_restore.arm b/ports/cortex_r7/ghs/src/tx_thread_context_restore.arm
index 84e9a4f93..9f8298641 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_context_restore.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_context_save.arm b/ports/cortex_r7/ghs/src/tx_thread_context_save.arm
index c83232f55..656ade3c1 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_context_save.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_fiq_context_restore.arm b/ports/cortex_r7/ghs/src/tx_thread_fiq_context_restore.arm
index 0c37d12da..7d83f989a 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_fiq_context_restore.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_fiq_context_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_fiq_context_save.arm b/ports/cortex_r7/ghs/src/tx_thread_fiq_context_save.arm
index 5ab8d701d..82d2bdac3 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_fiq_context_save.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_fiq_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_end.arm b/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_end.arm
index 1577f5eb5..30ac7c286 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_end.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_start.arm b/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_start.arm
index 81cefcff2..491366b88 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_start.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_fiq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_interrupt_control.arm b/ports/cortex_r7/ghs/src/tx_thread_interrupt_control.arm
index 1c84c17de..00297ae5d 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_interrupt_control.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_interrupt_control.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_interrupt_disable.arm b/ports/cortex_r7/ghs/src/tx_thread_interrupt_disable.arm
index 68ff706bc..6e1745b99 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_interrupt_disable.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_interrupt_disable.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_interrupt_restore.arm b/ports/cortex_r7/ghs/src/tx_thread_interrupt_restore.arm
index 2e3a4cd8e..7b63b0cbf 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_interrupt_restore.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_interrupt_restore.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_end.arm b/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_end.arm
index f5e644d6e..dc535b045 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_end.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_end.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_start.arm b/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_start.arm
index 48776848b..322b5211c 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_start.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_irq_nesting_start.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_schedule.arm b/ports/cortex_r7/ghs/src/tx_thread_schedule.arm
index acf51ff00..011813edd 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_schedule.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_schedule.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_stack_build.arm b/ports/cortex_r7/ghs/src/tx_thread_stack_build.arm
index 04921a519..b11571283 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_stack_build.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_stack_build.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_system_return.arm b/ports/cortex_r7/ghs/src/tx_thread_system_return.arm
index 2c15127c5..2cef1a6c1 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_system_return.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_system_return.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_thread_vectored_context_save.arm b/ports/cortex_r7/ghs/src/tx_thread_vectored_context_save.arm
index 56f5d2763..6d210e977 100644
--- a/ports/cortex_r7/ghs/src/tx_thread_vectored_context_save.arm
+++ b/ports/cortex_r7/ghs/src/tx_thread_vectored_context_save.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/cortex_r7/ghs/src/tx_timer_interrupt.arm b/ports/cortex_r7/ghs/src/tx_timer_interrupt.arm
index 5534b398b..44afdde5d 100644
--- a/ports/cortex_r7/ghs/src/tx_timer_interrupt.arm
+++ b/ports/cortex_r7/ghs/src/tx_timer_interrupt.arm
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
diff --git a/ports/linux/gnu/example_build/Makefile b/ports/linux/gnu/example_build/Makefile
index 17607360f..ddce01643 100644
--- a/ports/linux/gnu/example_build/Makefile
+++ b/ports/linux/gnu/example_build/Makefile
@@ -34,7 +34,7 @@ $(OUTPUT_FOLDER):
sample_threadx: $(OUTPUT_FOLDER)/sample_threadx.o tx.a
echo LD $@
- $(LINK) -o $@ $^ $(LIBS)
+ $(LINK) -o $@ $^ $(LIBS)
tx.a: $(OUTPUT_FOLDER) $(LINUX_OBJS) $(GENERIC_OBJS)
echo AR $@
@@ -68,7 +68,7 @@ files:
do \
filename=`basename $$file`; \
[ "$$file" == "sample_threadx.c" ] || echo "$$filename \\" >> $(FILE_LIST); \
- done;
+ done;
@printf "\n" >> $(FILE_LIST);
@echo 'LINUX_OBJS = $$(LINUX_SRCS:%.c=$(OUTPUT_FOLDER)/%.o)' >> $(FILE_LIST);
@printf "\n\n" >> $(FILE_LIST);
@@ -77,7 +77,7 @@ files:
do \
filename=`basename $$file`; \
[ "$$file" == "sample_threadx.c" ] || echo "$$filename \\" >> $(FILE_LIST); \
- done;
+ done;
@printf "\n" >> $(FILE_LIST);
@echo 'GENERIC_OBJS = $$(GENERIC_SRCS:%.c=$(OUTPUT_FOLDER)/generic/%.o)' >> $(FILE_LIST);
diff --git a/ports/linux/gnu/example_build/sample_threadx.c b/ports/linux/gnu/example_build/sample_threadx.c
index 080be3c41..43c0bdd46 100644
--- a/ports/linux/gnu/example_build/sample_threadx.c
+++ b/ports/linux/gnu/example_build/sample_threadx.c
@@ -1,5 +1,5 @@
/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
- threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
byte pool, and block pool. */
#include "tx_api.h"
@@ -80,42 +80,42 @@ CHAR *pointer = TX_NULL;
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create the main thread. */
- tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 1. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 1 and 2. These threads pass information through a ThreadX
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
message queue. It is also interesting to note that these threads have a time
slice. */
- tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 2. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
16, 16, 4, TX_AUTO_START);
/* Allocate the stack for thread 3. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
An interesting thing here is that both threads share the same instruction area. */
- tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 4. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 5. */
@@ -123,23 +123,23 @@ CHAR *pointer = TX_NULL;
/* Create thread 5. This thread simply pends on an event flag which will be set
by thread_0. */
- tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 6. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
/* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
- tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the stack for thread 7. */
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
- tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
- pointer, DEMO_STACK_SIZE,
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
/* Allocate the message queue. */
@@ -253,11 +253,11 @@ UINT status;
/* Retrieve a message from the queue. */
status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
- /* Check completion status and make sure the message is what we
+ /* Check completion status and make sure the message is what we
expected. */
if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
break;
-
+
/* Otherwise, all is okay. Increment the received message count. */
thread_2_messages_received++;
}
@@ -316,7 +316,7 @@ ULONG actual_flags;
thread_5_counter++;
/* Wait for event flag 0. */
- status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
&actual_flags, TX_WAIT_FOREVER);
/* Check status. */
@@ -369,7 +369,7 @@ UINT status;
if (status != TX_SUCCESS)
break;
- /* Release the mutex again. This will actually
+ /* Release the mutex again. This will actually
release ownership since it was obtained twice. */
status = tx_mutex_put(&mutex_0);
diff --git a/ports/linux/gnu/inc/tx_port.h b/ports/linux/gnu/inc/tx_port.h
index 7ca6161d4..83d72df08 100644
--- a/ports/linux/gnu/inc/tx_port.h
+++ b/ports/linux/gnu/inc/tx_port.h
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -20,11 +21,11 @@
/**************************************************************************/
-/**************************************************************************/
-/* */
-/* PORT SPECIFIC C INFORMATION RELEASE */
-/* */
-/* tx_port.h Linux/GNU */
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h Linux/GNU */
/* 6.3.0 */
/* */
/* AUTHOR */
@@ -32,30 +33,15 @@
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This file contains data type definitions that make the ThreadX */
-/* real-time kernel function identically on a variety of different */
-/* processor architectures. For example, the size or number of bits */
-/* in an "int" data type vary between microprocessor architectures and */
-/* even C compilers for the same microprocessor. ThreadX does not */
-/* directly use native C data types. Instead, ThreadX creates its */
-/* own special types that can be mapped to actual data types by this */
-/* file to guarantee consistency in the interface and functionality. */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* 10-15-2021 William E. Lamie Modified comment(s), added */
-/* symbol ULONG64_DEFINED, */
-/* resulting in version 6.1.9 */
-/* 04-25-2022 William E. Lamie Modified comment(s), removed */
-/* useless definition, */
-/* resulting in version 6.1.11 */
-/* 10-31-2023 Yanwu Cai Modified comment(s), fixed */
-/* compile warnings, */
-/* resulting in version 6.3.0 */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
/* */
/**************************************************************************/
@@ -547,7 +533,7 @@ VOID _tx_thread_interrupt_restore(UINT previous_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
- "Copyright (c) Microsoft Corporation * ThreadX Linux/gcc Version 6.4.2 *";
+ "Copyright (c) Microsoft Corporation * ThreadX Linux/gcc Version 6.5.0.202601 *";
#else
extern CHAR _tx_version_id[];
#endif
diff --git a/ports/linux/gnu/readme_threadx.txt b/ports/linux/gnu/readme_threadx.txt
index 997607c70..ba546d837 100644
--- a/ports/linux/gnu/readme_threadx.txt
+++ b/ports/linux/gnu/readme_threadx.txt
@@ -1,4 +1,4 @@
- Microsoft's Azure RTOS ThreadX for Linux
+ Microsoft's Azure RTOS ThreadX for Linux
Using the GNU GCC Tools
@@ -8,29 +8,29 @@ First make sure you are in the "example_build" directory. Also, make sure that
you have setup your path and other environment variables necessary for the GNU
development environment. The following command retrieves and installs GCC
multilib on a Ubuntu system:
-
+
sudo apt-get install gcc-multilib
-At this point you may run the GNU make command to build the ThreadX core
-library. This will build the ThreadX run-time environment in the
-"example_build" directory.
+At this point you may run the GNU make command to build the ThreadX core
+library. This will build the ThreadX run-time environment in the
+"example_build" directory.
make tx.a
-you should now observe the compilation of the ThreadX library source. At the
+you should now observe the compilation of the ThreadX library source. At the
end of the make, they are all combined into the run-time library file: tx.a.
This file must be linked with your application in order to use ThreadX.
-
+
2. Demonstration System
-Building the demonstration is easy; simply execute the GNU make command while
-inside the "example_build" directory.
+Building the demonstration is easy; simply execute the GNU make command while
+inside the "example_build" directory.
make sample_threadx
-You should observe the compilation of sample_threadx.c (which is the demonstration
-application) and linking with tx.a. The resulting file DEMO is a binary file
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file DEMO is a binary file
that can be executed.
2.1 Includes
@@ -56,15 +56,15 @@ the tx_port.h header to include tx_user.h.
3. System Initialization
-The system entry point is at main(), which is defined in the application.
-Once the application calls tx_kernel_enter, ThreadX starts running and
-performs various initialization duties prior to starting the scheduler. The
+The system entry point is at main(), which is defined in the application.
+Once the application calls tx_kernel_enter, ThreadX starts running and
+performs various initialization duties prior to starting the scheduler. The
Linux-specific initialization is done in the function _tx_initialize_low_level,
-which is located in the file tx_initialize_low_level.c. This function is
-responsible for setting up various system data structures and simulated
+which is located in the file tx_initialize_low_level.c. This function is
+responsible for setting up various system data structures and simulated
interrupts - including the periodic timer interrupt source for ThreadX.
-In addition, _tx_initialize_low_level determines the first available
+In addition, _tx_initialize_low_level determines the first available
address for use by the application. In Linux, this is basically done
by using malloc to get a big block of memory from Linux.
@@ -73,12 +73,12 @@ by using malloc to get a big block of memory from Linux.
ThreadX for Linux is implemented using POSIX pthreads. Each application
thread in ThreadX actually runs as a Linux pthread. The determination of
-which application thread to run is made by the ThreadX scheduler, which
-itself is a Linux pthread. The ThreadX scheduler is the highest priority
+which application thread to run is made by the ThreadX scheduler, which
+itself is a Linux pthread. The ThreadX scheduler is the highest priority
thread in the system.
Interrupts in ThreadX/Linux are also simulated by pthreads. A good example
-is the ThreadX system timer interrupt, which can be found in
+is the ThreadX system timer interrupt, which can be found in
tx_initialize_low_level.c.
ThreadX for linux utilizes the API pthread_setschedparam() which requires
@@ -89,12 +89,12 @@ to run a ThreadX application:
5. Improving Performance
-The distribution version of ThreadX is built without any compiler
-optimizations. This makes it easy to debug because you can trace or set
-breakpoints inside of ThreadX itself. Of course, this costs some
-performance. To make it run faster, you can change the makefile to
-enable all compiler optimizations. In addition, you can eliminate the
-ThreadX basic API error checking by compiling your application code with the
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the makefile to
+enable all compiler optimizations. In addition, you can eliminate the
+ThreadX basic API error checking by compiling your application code with the
symbol TX_DISABLE_ERROR_CHECKING defined.
@@ -102,7 +102,7 @@ symbol TX_DISABLE_ERROR_CHECKING defined.
ThreadX provides simulated interrupt handling with Linux pthreads. Simulated
interrupt threads may be created by the application or may be added to the
-simulated timer interrupt defined in tx_initialize_low_level.c. The following
+simulated timer interrupt defined in tx_initialize_low_level.c. The following
format for creating simulated interrupts should be used:
6.1 Data structures
@@ -133,7 +133,7 @@ struct sched_param sp;
6.3 Simulated Interrupt Thread Template
The following is a template for the simulated interrupt thread. This interrupt will occur on
-a periodic basis.
+a periodic basis.
void *_sample_linux_interrupt_entry(void *p)
{
@@ -154,7 +154,7 @@ struct timespec ts;
/* Call ThreadX context restore for interrupt completion. */
_tx_thread_context_restore();
- }
+ }
}
diff --git a/ports/linux/gnu/src/tx_initialize_low_level.c b/ports/linux/gnu/src/tx_initialize_low_level.c
index d3516aaae..32de408fd 100644
--- a/ports/linux/gnu/src/tx_initialize_low_level.c
+++ b/ports/linux/gnu/src/tx_initialize_low_level.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Initialize */
/** */
@@ -42,18 +43,18 @@ sem_t _tx_linux_semaphore_no_idle;
ULONG _tx_linux_global_int_disabled_flag;
struct timespec _tx_linux_time_stamp;
__thread int _tx_linux_threadx_thread = 0;
-
+
/* Define signals for linux thread. */
#define SUSPEND_SIG SIGUSR1
#define RESUME_SIG SIGUSR2
static sigset_t _tx_linux_thread_wait_mask;
-static __thread int _tx_linux_thread_suspended;
+static __thread int _tx_linux_thread_suspended;
static sem_t _tx_linux_thread_timer_wait;
static sem_t _tx_linux_thread_other_wait;
/* Define simulated timer interrupt. This is done inside a thread, which is
- how other interrupts may be defined as well. See code below for an
+ how other interrupts may be defined as well. See code below for an
example. */
pthread_t _tx_linux_timer_id;
@@ -136,11 +137,11 @@ pthread_mutex_t temp_copy;
/* Now move to the next entry. */
_tx_linux_debug_entry_index++;
-
+
/* Determine if we need to wrap the list. */
if (_tx_linux_debug_entry_index >= TX_LINUX_DEBUG_EVENT_SIZE)
{
-
+
/* Yes, wrap the list! */
_tx_linux_debug_entry_index = 0;
}
@@ -169,54 +170,48 @@ VOID _tx_thread_context_restore(VOID);
extern VOID *_tx_initialize_unused_memory;
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_initialize_low_level Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for any low-level processor */
-/* initialization, including setting up interrupt vectors, setting */
-/* up a periodic timer interrupt source, saving the system stack */
-/* pointer for use in ISR processing later, and finding the first */
-/* available RAM memory address for tx_application_define. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* sched_setaffinity */
-/* getpid */
-/* _tx_linux_thread_init */
-/* pthread_setschedparam */
-/* pthread_mutexattr_init */
-/* pthread_mutex_init */
-/* _tx_linux_thread_suspend */
-/* sem_init */
-/* pthread_create */
-/* printf */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_initialize_kernel_enter ThreadX entry function */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* sched_setaffinity */
+/* getpid */
+/* _tx_linux_thread_init */
+/* pthread_setschedparam */
+/* pthread_mutexattr_init */
+/* pthread_mutex_init */
+/* _tx_linux_thread_suspend */
+/* sem_init */
+/* pthread_create */
+/* printf */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
/**************************************************************************/
VOID _tx_initialize_low_level(VOID)
@@ -238,7 +233,7 @@ cpu_set_t mask;
CPU_SET(rand() % get_nprocs(), &mask);
if (sched_setaffinity(getpid(), sizeof(mask), &mask) != 0)
{
-
+
/* Error restricting the process to one core. */
printf("ThreadX Linux error restricting the process to one core!\n");
while(1)
@@ -260,7 +255,7 @@ cpu_set_t mask;
sp.sched_priority = TX_LINUX_PRIORITY_SCHEDULE;
pthread_setschedparam(pthread_self(), SCHED_FIFO, &sp);
- /* Create the system critical section. This is used by the
+ /* Create the system critical section. This is used by the
scheduler thread (which is the main thread) to block all
other stuff out. */
pthread_mutexattr_init(&attr);
@@ -273,10 +268,10 @@ cpu_set_t mask;
/* Initialize the global interrupt disabled flag. */
_tx_linux_global_int_disabled_flag = TX_FALSE;
-
+
/* Create semaphore for timer thread. */
sem_init(&_tx_linux_timer_semaphore, 0, 0);
-
+
/* Create semaphore for ISR thread. */
sem_init(&_tx_linux_isr_semaphore, 0, 0);
@@ -302,7 +297,7 @@ cpu_set_t mask;
/* This routine is called after initialization is complete in order to start
- all interrupt threads. Interrupt threads in addition to the timer may
+ all interrupt threads. Interrupt threads in addition to the timer may
be added to this routine as well. */
void _tx_initialize_start_interrupts(void)
@@ -377,7 +372,7 @@ int err;
tx_linux_mutex_unlock(_tx_linux_mutex);
#endif /* TX_LINUX_NO_IDLE_ENABLE */
- }
+ }
}
/* Define functions for linux thread. */
@@ -395,11 +390,11 @@ void _tx_linux_thread_suspend_handler(int sig)
else
tx_linux_sem_post_nolock(&_tx_linux_thread_other_wait);
- if(_tx_linux_thread_suspended)
+ if(_tx_linux_thread_suspended)
return;
_tx_linux_thread_suspended = 1;
- sigsuspend(&_tx_linux_thread_wait_mask);
+ sigsuspend(&_tx_linux_thread_wait_mask);
_tx_linux_thread_suspended = 0;
}
diff --git a/ports/linux/gnu/src/tx_thread_context_restore.c b/ports/linux/gnu/src/tx_thread_context_restore.c
index 5466b30e2..3d7b44bba 100644
--- a/ports/linux/gnu/src/tx_thread_context_restore.c
+++ b/ports/linux/gnu/src/tx_thread_context_restore.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -31,50 +32,44 @@
extern sem_t _tx_linux_isr_semaphore;
UINT _tx_linux_timer_waiting = 0;
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_context_restore Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_restore Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function restores the interrupt context if it is processing a */
-/* nested interrupt. If not, it returns to the interrupt thread if no */
-/* preemption is necessary. Otherwise, if preemption is necessary or */
-/* if no thread was running, the function returns to the scheduler. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_linux_debug_entry_insert */
-/* tx_linux_mutex_lock */
+/* */
+/* This function restores the interrupt context if it is processing a */
+/* nested interrupt. If not, it returns to the interrupt thread if no */
+/* preemption is necessary. Otherwise, if preemption is necessary or */
+/* if no thread was running, the function returns to the scheduler. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_linux_debug_entry_insert */
+/* tx_linux_mutex_lock */
/* sem_trywait */
-/* tx_linux_sem_post */
-/* tx_linux_sem_wait */
-/* _tx_linux_thread_resume */
-/* tx_linux_mutex_recursive_unlock */
-/* */
-/* CALLED BY */
-/* */
-/* ISRs Interrupt Service Routines */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
+/* tx_linux_sem_post */
+/* tx_linux_sem_wait */
+/* _tx_linux_thread_resume */
+/* tx_linux_mutex_recursive_unlock */
+/* */
+/* CALLED BY */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* ISRs Interrupt Service Routines */
/* */
/**************************************************************************/
VOID _tx_thread_context_restore(VOID)
@@ -101,7 +96,7 @@ VOID _tx_thread_context_restore(VOID)
if ((_tx_thread_preempt_disable == 0) && (_tx_thread_current_ptr != _tx_thread_execute_ptr))
{
- /* Preempt the running application thread. We don't need to suspend the
+ /* Preempt the running application thread. We don't need to suspend the
application thread since that is done in the context save processing. */
/* Indicate that this thread was suspended asynchronously. */
diff --git a/ports/linux/gnu/src/tx_thread_context_save.c b/ports/linux/gnu/src/tx_thread_context_save.c
index c98943fa9..7bca3945f 100644
--- a/ports/linux/gnu/src/tx_thread_context_save.c
+++ b/ports/linux/gnu/src/tx_thread_context_save.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -30,46 +31,40 @@
#include "tx_timer.h"
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_context_save Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_save Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function saves the context of an executing thread in the */
-/* beginning of interrupt processing. The function also ensures that */
-/* the system stack is used upon return to the calling ISR. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_linux_debug_entry_insert */
-/* tx_linux_mutex_lock */
-/* _tx_linux_thread_suspend */
-/* tx_linux_mutex_unlock */
-/* */
-/* CALLED BY */
-/* */
-/* ISRs */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function saves the context of an executing thread in the */
+/* beginning of interrupt processing. The function also ensures that */
+/* the system stack is used upon return to the calling ISR. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_linux_debug_entry_insert */
+/* tx_linux_mutex_lock */
+/* _tx_linux_thread_suspend */
+/* tx_linux_mutex_unlock */
+/* */
+/* CALLED BY */
+/* */
+/* ISRs */
/* */
/**************************************************************************/
VOID _tx_thread_context_save(VOID)
diff --git a/ports/linux/gnu/src/tx_thread_interrupt_control.c b/ports/linux/gnu/src/tx_thread_interrupt_control.c
index 657cf72ec..75b62511e 100644
--- a/ports/linux/gnu/src/tx_thread_interrupt_control.c
+++ b/ports/linux/gnu/src/tx_thread_interrupt_control.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -47,53 +48,47 @@ VOID _tx_thread_interrupt_restore(UINT previous_posture)
}
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_interrupt_control Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_interrupt_control Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is responsible for changing the interrupt lockout */
-/* posture of the system. */
-/* */
-/* INPUT */
-/* */
-/* new_posture New interrupt lockout posture */
-/* */
-/* OUTPUT */
-/* */
-/* old_posture Old interrupt lockout posture */
-/* */
-/* CALLS */
-/* */
-/* tx_linux_mutex_lock */
-/* pthread_self */
-/* pthread_getschedparam */
-/* tx_linux_mutex_recursive_unlock */
-/* pthread_exit */
-/* */
-/* CALLED BY */
-/* */
-/* Application Code */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function is responsible for changing the interrupt lockout */
+/* posture of the system. */
+/* */
+/* INPUT */
+/* */
+/* new_posture New interrupt lockout posture */
+/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt lockout posture */
+/* */
+/* CALLS */
+/* */
+/* tx_linux_mutex_lock */
+/* pthread_self */
+/* pthread_getschedparam */
+/* tx_linux_mutex_recursive_unlock */
+/* pthread_exit */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
/* */
/**************************************************************************/
UINT _tx_thread_interrupt_control(UINT new_posture)
{
UINT old_posture;
-TX_THREAD *thread_ptr;
+TX_THREAD *thread_ptr;
pthread_t thread_id;
int exit_code = 0;
@@ -107,18 +102,18 @@ int exit_code = 0;
/* Pickup the current thread pointer. */
thread_ptr = _tx_thread_current_ptr;
- /* Determine if this is a thread and it does not
+ /* Determine if this is a thread and it does not
match the current thread pointer. */
- if ((_tx_linux_threadx_thread) &&
- ((!thread_ptr) || (!pthread_equal(thread_ptr -> tx_thread_linux_thread_id, thread_id))))
- {
+ if ((_tx_linux_threadx_thread) &&
+ ((!thread_ptr) || (!pthread_equal(thread_ptr -> tx_thread_linux_thread_id, thread_id))))
+ {
- /* This indicates the Linux thread was actually terminated by ThreadX is only
+ /* This indicates the Linux thread was actually terminated by ThreadX is only
being allowed to run in order to cleanup its resources. */
/* Unlock linux mutex. */
tx_linux_mutex_recursive_unlock(_tx_linux_mutex);
pthread_exit((void *)&exit_code);
- }
+ }
/* Determine the current interrupt lockout condition. */
if (tx_linux_mutex_recursive_count == 1)
@@ -155,7 +150,7 @@ int exit_code = 0;
_tx_linux_global_int_disabled_flag = TX_TRUE;
}
}
- else if (thread_ptr)
+ else if (thread_ptr)
{
/* Determine how to apply the new posture. */
diff --git a/ports/linux/gnu/src/tx_thread_schedule.c b/ports/linux/gnu/src/tx_thread_schedule.c
index d65104a18..eeff680fc 100644
--- a/ports/linux/gnu/src/tx_thread_schedule.c
+++ b/ports/linux/gnu/src/tx_thread_schedule.c
@@ -1,10 +1,11 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -39,7 +40,7 @@ extern pthread_t _tx_linux_timer_id;
/* */
/* FUNCTION RELEASE */
/* */
-/* _tx_thread_schedule Linux/GNU */
+/* _tx_thread_schedule Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
@@ -73,12 +74,6 @@ extern pthread_t _tx_linux_timer_id;
/* */
/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
-/* */
/**************************************************************************/
VOID _tx_thread_schedule(VOID)
{
@@ -127,9 +122,9 @@ struct timespec ts;
ts.tv_sec++;
}
sem_timedwait(&_tx_linux_semaphore_no_idle, &ts);
-#else
+#else
nanosleep(&ts, &ts);
-#endif /* TX_LINUX_NO_IDLE_ENABLE */
+#endif /* TX_LINUX_NO_IDLE_ENABLE */
}
}
diff --git a/ports/linux/gnu/src/tx_thread_stack_build.c b/ports/linux/gnu/src/tx_thread_stack_build.c
index 424f53e23..cdadba6c2 100644
--- a/ports/linux/gnu/src/tx_thread_stack_build.c
+++ b/ports/linux/gnu/src/tx_thread_stack_build.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -36,50 +37,44 @@
void *_tx_linux_thread_entry(void *ptr);
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_stack_build Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_stack_build Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
+/* */
/* This function builds a stack frame on the supplied thread's stack. */
/* The stack frame results in a fake interrupt return to the supplied */
-/* function pointer. */
-/* */
-/* INPUT */
-/* */
+/* function pointer. */
+/* */
+/* INPUT */
+/* */
/* thread_ptr Pointer to thread control blk */
/* function_ptr Pointer to return function */
-/* */
-/* OUTPUT */
-/* */
+/* */
+/* OUTPUT */
+/* */
/* None */
-/* */
-/* CALLS */
-/* */
-/* pthread_create */
-/* pthread_setschedparam */
-/* _tx_linux_thread_suspend */
-/* sem_init */
-/* printf */
-/* _tx_linux_thread_resume */
-/* */
-/* CALLED BY */
-/* */
-/* _tx_thread_create Create thread service */
-/* _tx_thread_reset Reset thread service */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* CALLS */
+/* */
+/* pthread_create */
+/* pthread_setschedparam */
+/* _tx_linux_thread_suspend */
+/* sem_init */
+/* printf */
+/* _tx_linux_thread_resume */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create Create thread service */
+/* _tx_thread_reset Reset thread service */
/* */
/**************************************************************************/
VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
@@ -115,11 +110,11 @@ struct sched_param sp;
sp.sched_priority = TX_LINUX_PRIORITY_USER_THREAD;
pthread_setschedparam(thread_ptr -> tx_thread_linux_thread_id, SCHED_FIFO, &sp);
- /* Setup the thread suspension type to solicited thread suspension.
+ /* Setup the thread suspension type to solicited thread suspension.
Pseudo interrupt handlers will suspend with this field set to 1. */
thread_ptr -> tx_thread_linux_suspension_type = 0;
- /* Clear the disabled count that will keep track of the
+ /* Clear the disabled count that will keep track of the
tx_interrupt_control nesting. */
thread_ptr -> tx_thread_linux_int_disabled_flag = 0;
diff --git a/ports/linux/gnu/src/tx_thread_system_return.c b/ports/linux/gnu/src/tx_thread_system_return.c
index 16d81d594..cc876721a 100644
--- a/ports/linux/gnu/src/tx_thread_system_return.c
+++ b/ports/linux/gnu/src/tx_thread_system_return.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Thread */
/** */
@@ -30,54 +31,48 @@
#include
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_thread_system_return Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_system_return Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function is target processor specific. It is used to transfer */
-/* control from a thread back to the system. Only a minimal context */
-/* is saved since the compiler assumes temp registers are going to get */
-/* slicked by a function call anyway. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_linux_debug_entry_insert */
-/* tx_linux_mutex_lock */
-/* pthread_self */
-/* pthread_getschedparam */
-/* pthread_equal */
-/* tx_linux_mutex_recursive_unlock */
-/* tx_linux_mutex_unlock */
-/* pthread_exit */
-/* tx_linux_sem_post */
+/* */
+/* This function is target processor specific. It is used to transfer */
+/* control from a thread back to the system. Only a minimal context */
+/* is saved since the compiler assumes temp registers are going to get */
+/* slicked by a function call anyway. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_linux_debug_entry_insert */
+/* tx_linux_mutex_lock */
+/* pthread_self */
+/* pthread_getschedparam */
+/* pthread_equal */
+/* tx_linux_mutex_recursive_unlock */
+/* tx_linux_mutex_unlock */
+/* pthread_exit */
+/* tx_linux_sem_post */
/* sem_trywait */
-/* tx_linux_sem_wait */
-/* */
-/* CALLED BY */
-/* */
-/* ThreadX components */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
+/* tx_linux_sem_wait */
+/* */
+/* CALLED BY */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* ThreadX components */
/* */
/**************************************************************************/
VOID _tx_thread_system_return(VOID)
@@ -104,13 +99,13 @@ int exit_code = 0;
/* Pickup the current thread pointer. */
temp_thread_ptr = _tx_thread_current_ptr;
- /* Determine if this is a thread (0) and it does not
+ /* Determine if this is a thread (0) and it does not
match the current thread pointer. */
- if ((_tx_linux_threadx_thread) &&
- ((!temp_thread_ptr) || (!pthread_equal(temp_thread_ptr -> tx_thread_linux_thread_id, thread_id))))
- {
+ if ((_tx_linux_threadx_thread) &&
+ ((!temp_thread_ptr) || (!pthread_equal(temp_thread_ptr -> tx_thread_linux_thread_id, thread_id))))
+ {
- /* This indicates the Linux thread was actually terminated by ThreadX is only
+ /* This indicates the Linux thread was actually terminated by ThreadX is only
being allowed to run in order to cleanup its resources. */
/* Unlock linux mutex. */
tx_linux_mutex_recursive_unlock(_tx_linux_mutex);
@@ -176,19 +171,19 @@ int exit_code = 0;
/* Pickup the current thread pointer. */
temp_thread_ptr = _tx_thread_current_ptr;
- /* Determine if this is a thread and it does not
+ /* Determine if this is a thread and it does not
match the current thread pointer. */
- if ((_tx_linux_threadx_thread) &&
- ((!temp_thread_ptr) || (!pthread_equal(temp_thread_ptr -> tx_thread_linux_thread_id, thread_id))))
- {
+ if ((_tx_linux_threadx_thread) &&
+ ((!temp_thread_ptr) || (!pthread_equal(temp_thread_ptr -> tx_thread_linux_thread_id, thread_id))))
+ {
/* Unlock Linux mutex. */
tx_linux_mutex_recursive_unlock(_tx_linux_mutex);
- /* This indicates the Linux thread was actually terminated by ThreadX and is only
+ /* This indicates the Linux thread was actually terminated by ThreadX and is only
being allowed to run in order to cleanup its resources. */
pthread_exit((void *)&exit_code);
- }
+ }
/* Now determine if the application thread last had interrupts disabled. */
diff --git a/ports/linux/gnu/src/tx_timer_interrupt.c b/ports/linux/gnu/src/tx_timer_interrupt.c
index 8e55ca7f9..d139fd9b7 100644
--- a/ports/linux/gnu/src/tx_timer_interrupt.c
+++ b/ports/linux/gnu/src/tx_timer_interrupt.c
@@ -1,18 +1,19 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-/** */
-/** ThreadX Component */
+/** */
+/** ThreadX Component */
/** */
/** Timer */
/** */
@@ -30,49 +31,43 @@
VOID _tx_timer_interrupt(VOID);
-/**************************************************************************/
-/* */
-/* FUNCTION RELEASE */
-/* */
-/* _tx_timer_interrupt Linux/GNU */
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_timer_interrupt Linux/GNU */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
-/* */
-/* This function processes the hardware timer interrupt. This */
-/* processing includes incrementing the system clock and checking for */
-/* time slice and/or timer expiration. If either is found, the */
-/* interrupt context save/restore functions are called along with the */
-/* expiration functions. */
-/* */
-/* INPUT */
-/* */
-/* None */
-/* */
-/* OUTPUT */
-/* */
-/* None */
-/* */
-/* CALLS */
-/* */
-/* _tx_linux_debug_entry_insert */
-/* tx_linux_mutex_lock */
-/* tx_linux_mutex_unlock */
-/* _tx_timer_expiration_process */
-/* _tx_thread_time_slice */
-/* */
-/* CALLED BY */
-/* */
-/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
/* */
-/* 09-30-2020 William E. Lamie Initial Version 6.1 */
+/* This function processes the hardware timer interrupt. This */
+/* processing includes incrementing the system clock and checking for */
+/* time slice and/or timer expiration. If either is found, the */
+/* interrupt context save/restore functions are called along with the */
+/* expiration functions. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_linux_debug_entry_insert */
+/* tx_linux_mutex_lock */
+/* tx_linux_mutex_unlock */
+/* _tx_timer_expiration_process */
+/* _tx_thread_time_slice */
+/* */
+/* CALLED BY */
+/* */
+/* interrupt vector */
/* */
/**************************************************************************/
VOID _tx_timer_interrupt(VOID)
diff --git a/ports/risc-v32/clang/CMakeLists.txt b/ports/risc-v32/clang/CMakeLists.txt
new file mode 100644
index 000000000..9b7251031
--- /dev/null
+++ b/ports/risc-v32/clang/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+target_sources(${PROJECT_NAME}
+ PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_initialize_low_level.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_timer_interrupt.S
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME}
+ PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/board.c b/ports/risc-v32/clang/example_build/qemu_virt/board.c
new file mode 100644
index 000000000..47f828d43
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/board.c
@@ -0,0 +1,42 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "plic.h"
+#include "hwtimer.h"
+#include "uart.h"
+#include
+#include
+
+void *memset(void *des, int c,size_t n)
+{
+ if((des == NULL) || n <=0)
+ return (void*)des;
+ char* t = (char*)des;
+ int i;
+ for(i=0;i
+
+static inline uint32_t riscv_get_core()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mhartid" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_mstatus()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mstatus" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mstatus(uint32_t x)
+{
+ asm volatile("csrw mstatus, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_mepc(uint32_t x)
+{
+ asm volatile("csrw mepc, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sstatus()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sstatus" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sstatus(uint32_t x)
+{
+ asm volatile("csrw sstatus, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sip()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sip" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sip(uint32_t x)
+{
+ asm volatile("csrw sip, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sie()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sie" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sie(uint32_t x)
+{
+ asm volatile("csrw sie, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mie()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mie" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mie(uint32_t x)
+{
+ asm volatile("csrw mie, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_sepc(uint32_t x)
+{
+ asm volatile("csrw sepc, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sepc()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sepc" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_medeleg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, medeleg" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_medeleg(uint32_t x)
+{
+ asm volatile("csrw medeleg, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mideleg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mideleg" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mideleg(uint32_t x)
+{
+ asm volatile("csrw mideleg, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_stvec(uint32_t x)
+{
+ asm volatile("csrw stvec, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_stvec()
+{
+ uint32_t x;
+ asm volatile("csrr %0, stvec" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_stimecmp()
+{
+ uint32_t x;
+ asm volatile("csrr %0, 0x14d" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_stimecmp(uint32_t x)
+{
+ asm volatile("csrw 0x14d, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_menvcfg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, 0x30a" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_menvcfg(uint32_t x)
+{
+ asm volatile("csrw 0x30a, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_pmpcfg0(uint32_t x)
+{
+ asm volatile("csrw pmpcfg0, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_pmpaddr0(uint32_t x)
+{
+ asm volatile("csrw pmpaddr0, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_satp(uint32_t x)
+{
+ asm volatile("csrw satp, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_satp()
+{
+ uint32_t x;
+ asm volatile("csrr %0, satp" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_scause()
+{
+ uint32_t x;
+ asm volatile("csrr %0, scause" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_stval()
+{
+ uint32_t x;
+ asm volatile("csrr %0, stval" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mcounteren(uint32_t x)
+{
+ asm volatile("csrw mcounteren, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mcounteren()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mcounteren" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_time()
+{
+ uint32_t x;
+ asm volatile("csrr %0, time" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_sintr_on()
+{
+ uint32_t sstatus = riscv_get_sstatus();
+ sstatus |= SSTATUS_SIE;
+ riscv_writ_sstatus(sstatus);
+}
+
+static inline void riscv_sintr_off()
+{
+ uint32_t sstatus = riscv_get_sstatus();
+ sstatus &= (~SSTATUS_SIE);
+ riscv_writ_sstatus(sstatus);
+}
+
+static inline int riscv_sintr_get()
+{
+ uint32_t x = riscv_get_sstatus();
+ return (x & SSTATUS_SIE) != 0;
+}
+
+static inline void riscv_sintr_restore(int x)
+{
+ if(x)
+ riscv_sintr_on();
+ else
+ riscv_sintr_off();
+}
+
+static inline void riscv_mintr_on()
+{
+ uint32_t mstatus = riscv_get_mstatus();
+ mstatus |= MSTATUS_MIE;
+ riscv_writ_mstatus(mstatus);
+}
+
+static inline void riscv_mintr_off()
+{
+ uint32_t mstatus = riscv_get_mstatus();
+ mstatus &= (~MSTATUS_MIE);
+ riscv_writ_mstatus(mstatus);
+}
+
+static inline int riscv_mintr_get()
+{
+ uint32_t x = riscv_get_mstatus();
+ return (x & MSTATUS_MIE) != 0;
+}
+
+static inline void riscv_mintr_restore(int x)
+{
+ if(x)
+ riscv_mintr_on();
+ else
+ riscv_mintr_off();
+}
+
+static inline uint32_t riscv_get_sp()
+{
+ uint32_t x;
+ asm volatile("mv %0, sp" : "=r" (x) );
+ return x;
+}
+
+// read and write tp, the thread pointer, which xv6 uses to hold
+// this core's hartid (core number), the index into cpus[].
+static inline uint32_t riscv_get_tp()
+{
+ uint32_t x;
+ asm volatile("mv %0, tp" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_tp(uint32_t x)
+{
+ asm volatile("mv tp, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_ra()
+{
+ uint32_t x;
+ asm volatile("mv %0, ra" : "=r" (x) );
+ return x;
+}
+
+// flush the TLB.
+static inline void sfence_vma()
+{
+ // the zero, zero means flush all TLB entries.
+ asm volatile("sfence.vma zero, zero");
+}
+
+#endif // __ASSEMBLER__
+
+#endif
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/demo_threadx.c b/ports/risc-v32/clang/example_build/qemu_virt/demo_threadx.c
new file mode 100644
index 000000000..a5955b298
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/demo_threadx.c
@@ -0,0 +1,397 @@
+/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ byte pool, and block pool. */
+
+#include "tx_api.h"
+#include "uart.h"
+
+#define DEMO_STACK_SIZE 1024
+#define DEMO_BYTE_POOL_SIZE 9120
+#define DEMO_BLOCK_POOL_SIZE 100
+#define DEMO_QUEUE_SIZE 100
+
+char *_to_str(ULONG val)
+{
+ static char buf[11]; /* 10 digits max + '\0' */
+ char *p = buf + sizeof(buf) - 1;
+
+ *p = '\0';
+ do {
+ *--p = '0' + (val % 10);
+ val /= 10;
+ } while (val);
+
+ return p;
+}
+
+/* Define the ThreadX object control blocks... */
+
+TX_THREAD thread_0;
+TX_THREAD thread_1;
+TX_THREAD thread_2;
+TX_THREAD thread_3;
+TX_THREAD thread_4;
+TX_THREAD thread_5;
+TX_THREAD thread_6;
+TX_THREAD thread_7;
+TX_QUEUE queue_0;
+TX_SEMAPHORE semaphore_0;
+TX_MUTEX mutex_0;
+TX_EVENT_FLAGS_GROUP event_flags_0;
+TX_BYTE_POOL byte_pool_0;
+TX_BLOCK_POOL block_pool_0;
+
+
+/* Define the counters used in the demo application... */
+
+ULONG thread_0_counter;
+ULONG thread_1_counter;
+ULONG thread_1_messages_sent;
+ULONG thread_2_counter;
+ULONG thread_2_messages_received;
+ULONG thread_3_counter;
+ULONG thread_4_counter;
+ULONG thread_5_counter;
+ULONG thread_6_counter;
+ULONG thread_7_counter;
+
+
+/* Define thread prototypes. */
+
+void thread_0_entry(ULONG thread_input);
+void thread_1_entry(ULONG thread_input);
+void thread_2_entry(ULONG thread_input);
+void thread_3_and_4_entry(ULONG thread_input);
+void thread_5_entry(ULONG thread_input);
+void thread_6_and_7_entry(ULONG thread_input);
+
+
+/* Define main entry point. */
+
+int main()
+{
+
+ /* Enter the ThreadX kernel. */
+ tx_kernel_enter();
+}
+
+
+/* Define what the initial system looks like. */
+
+void tx_application_define(void *first_unused_memory)
+{
+ CHAR *pointer = TX_NULL;
+
+ /* Create a byte memory pool from which to allocate the thread stacks. */
+ tx_byte_pool_create(&byte_pool_0, "byte pool 0", first_unused_memory, DEMO_BYTE_POOL_SIZE);
+
+ /* Put system definition stuff in here, e.g. thread creates and other assorted
+ create information. */
+
+ /* Allocate the stack for thread 0. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create the main thread. */
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+
+ /* Allocate the stack for thread 1. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
+ message queue. It is also interesting to note that these threads have a time
+ slice. */
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 2. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 3. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ An interesting thing here is that both threads share the same instruction area. */
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 4. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 5. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create thread 5. This thread simply pends on an event flag which will be set
+ by thread_0. */
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
+ 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 6. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 7. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the message queue. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
+
+ /* Create the message queue shared by threads 1 and 2. */
+ tx_queue_create(&queue_0, "queue 0", TX_1_ULONG, pointer, DEMO_QUEUE_SIZE*sizeof(ULONG));
+
+ /* Create the semaphore used by threads 3 and 4. */
+ tx_semaphore_create(&semaphore_0, "semaphore 0", 1);
+
+ /* Create the event flags group used by threads 1 and 5. */
+ tx_event_flags_create(&event_flags_0, "event flags 0");
+
+ /* Create the mutex used by thread 6 and 7 without priority inheritance. */
+ tx_mutex_create(&mutex_0, "mutex 0", TX_NO_INHERIT);
+
+ /* Allocate the memory for a small block pool. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_BLOCK_POOL_SIZE, TX_NO_WAIT);
+
+ /* Create a block memory pool to allocate a message buffer from. */
+ tx_block_pool_create(&block_pool_0, "block pool 0", sizeof(ULONG), pointer, DEMO_BLOCK_POOL_SIZE);
+
+ /* Allocate a block and release the block memory. */
+ tx_block_allocate(&block_pool_0, (VOID **) &pointer, TX_NO_WAIT);
+
+ /* Release the block back to the pool. */
+ tx_block_release(pointer);
+}
+
+
+
+/* Define the test threads. */
+
+void thread_0_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sits in while-forever-sleep loop. */
+ while(1)
+ {
+ puts("[Thread] : thread_0_entry is here!");
+
+ /* Increment the thread counter. */
+ thread_0_counter++;
+
+ /* Sleep for 10 ticks. */
+ tx_thread_sleep(10);
+
+ /* Set event flag 0 to wakeup thread 5. */
+ status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_1_entry(ULONG thread_input)
+{
+
+UINT status;
+
+ /* This thread simply sends messages to a queue shared by thread 2. */
+ while(1)
+ {
+ puts("[Thread] : thread_1_entry is here!");
+ /* Increment the thread counter. */
+ thread_1_counter++;
+
+ /* Send message to queue 0. */
+ status = tx_queue_send(&queue_0, &thread_1_messages_sent, TX_WAIT_FOREVER);
+
+ tx_thread_sleep(2);
+
+ /* Check completion status. */
+ if (status != TX_SUCCESS) {
+ puts("[Thread 1] ERROR: Failed to send message!");
+ break;
+ }
+
+ /* Increment the message sent. */
+ thread_1_messages_sent++;
+ }
+}
+
+
+
+void thread_2_entry(ULONG thread_input)
+{
+
+ULONG received_message;
+UINT status;
+
+ /* This thread retrieves messages placed on the queue by thread 1. */
+ while(1)
+ {
+ puts("[Thread] : thread_2_entry is here!");
+ /* Increment the thread counter. */
+ thread_2_counter++;
+
+ /* Retrieve a message from the queue. */
+ status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
+
+ tx_thread_sleep(2);
+
+ /* Check completion status and make sure the message is what we
+ expected. */
+ if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received)){
+ puts("[Thread 2] ERROR: Failed to receive message ! Expected # ");
+ uart_puts(_to_str(thread_2_messages_received));
+ puts(", but got # ");
+ uart_puts(_to_str(received_message));
+ break;
+ }
+
+ /* Otherwise, all is okay. Increment the received message count. */
+ thread_2_messages_received++;
+ }
+}
+
+
+void thread_3_and_4_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 3 and thread 4. As the loop
+ below shows, these function compete for ownership of semaphore_0. */
+ while(1)
+ {
+ puts("[Thread] : thread_3_and_4_entry is here!");
+
+
+ /* Increment the thread counter. */
+ if (thread_input == 3)
+ thread_3_counter++;
+ else
+ thread_4_counter++;
+
+ /* Get the semaphore with suspension. */
+ status = tx_semaphore_get(&semaphore_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the semaphore. */
+ tx_thread_sleep(2);
+
+ /* Release the semaphore. */
+ status = tx_semaphore_put(&semaphore_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_5_entry(ULONG thread_input)
+{
+
+UINT status;
+ULONG actual_flags;
+
+
+ /* This thread simply waits for an event in a forever loop. */
+ while(1)
+ {
+ puts("[Thread] : thread_5_entry is here!");
+
+ /* Increment the thread counter. */
+ thread_5_counter++;
+
+ /* Wait for event flag 0. */
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ &actual_flags, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if ((status != TX_SUCCESS) || (actual_flags != 0x1))
+ break;
+ }
+}
+
+
+void thread_6_and_7_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 6 and thread 7. As the loop
+ below shows, these function compete for ownership of mutex_0. */
+ while(1)
+ {
+ puts("[Thread] : thread_6_and_7_entry is here!");
+
+ /* Increment the thread counter. */
+ if (thread_input == 6)
+ thread_6_counter++;
+ else
+ thread_7_counter++;
+
+ /* Get the mutex with suspension. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Get the mutex again with suspension. This shows
+ that an owning thread may retrieve the mutex it
+ owns multiple times. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the mutex. */
+ tx_thread_sleep(2);
+
+ /* Release the mutex. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Release the mutex again. This will actually
+ release ownership since it was obtained twice. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/entry.s b/ports/risc-v32/clang/example_build/qemu_virt/entry.s
new file mode 100644
index 000000000..9b202ca16
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/entry.s
@@ -0,0 +1,58 @@
+
+.section .text
+.align 4
+.global _start
+.extern main
+.extern _sysstack_start
+.extern _bss_start
+.extern _bss_end
+_start:
+ csrr t0, mhartid
+ bne t0, zero, 1f
+ li x1, 0
+ li x2, 0
+ li x3, 0
+ li x4, 0
+ li x5, 0
+ li x6, 0
+ li x7, 0
+ li x8, 0
+ li x9, 0
+ li x10, 0
+ li x11, 0
+ li x12, 0
+ li x13, 0
+ li x14, 0
+ li x15, 0
+ li x16, 0
+ li x17, 0
+ li x18, 0
+ li x19, 0
+ li x20, 0
+ li x21, 0
+ li x22, 0
+ li x23, 0
+ li x24, 0
+ li x25, 0
+ li x26, 0
+ li x27, 0
+ li x28, 0
+ li x29, 0
+ li x30, 0
+ li x31, 0
+ la t0, _sysstack_start
+ li t1, 0x1000
+ add sp, t0, t1
+ la t0, _bss_start
+ la t1, _bss_end
+_bss_clean_start:
+ bgeu t0, t1, _bss_clean_end
+ sb zero, 0(t0)
+ addi t0, t0, 1
+ j _bss_clean_start
+_bss_clean_end:
+ call main
+1:
+ /* todo smp */
+ wfi
+ j 1b
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.c b/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.c
new file mode 100644
index 000000000..b5335cf30
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.c
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "tx_port.h"
+#include "csr.h"
+#include "hwtimer.h"
+
+#define CLINT (0x02000000L)
+#define CLINT_TIME (CLINT+0xBFF8)
+#define CLINT_TIMECMP(hart_id) (CLINT+0x4000+8*(hart_id))
+
+
+int hwtimer_init(void)
+{
+ int hart = riscv_get_core();
+ uint64_t time = *((uint64_t*)CLINT_TIME);
+ *((uint64_t*)CLINT_TIMECMP(hart)) = time + TICKNUM_PER_TIMER;
+ return 0;
+}
+
+int hwtimer_handler(void)
+{
+ int hart = riscv_get_core();
+ uint64_t time = *((uint64_t*)CLINT_TIME);
+ *((uint64_t*)CLINT_TIMECMP(hart)) = time + TICKNUM_PER_TIMER;
+ return 0;
+}
+
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.h b/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.h
new file mode 100644
index 000000000..e27a7578b
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/hwtimer.h
@@ -0,0 +1,23 @@
+
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#ifndef RISCV_HWTIMER_H
+#define RISCV_HWTIMER_H
+
+#include
+
+#define TICKNUM_PER_SECOND 10000000
+#define TICKNUM_PER_TIMER (TICKNUM_PER_SECOND / 10)
+
+int hwtimer_init(void);
+int hwtimer_handler(void);
+
+#endif
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/link.lds b/ports/risc-v32/clang/example_build/qemu_virt/link.lds
new file mode 100644
index 000000000..522f90d96
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/link.lds
@@ -0,0 +1,49 @@
+OUTPUT_ARCH( "riscv" )
+ENTRY( _start )
+
+SECTIONS
+{
+ /*
+ * ensure that entry.S / _entry is at 0x80000000,
+ * where qemu's -kernel jumps.
+ */
+ . = 0x80000000;
+
+ .text : {
+ *(.text .text.*)
+ . = ALIGN(0x1000);
+ PROVIDE(etext = .);
+ }
+
+ .rodata : {
+ . = ALIGN(16);
+ *(.srodata .srodata.*) /* do not need to distinguish this from .rodata */
+ . = ALIGN(16);
+ *(.rodata .rodata.*)
+ }
+
+ .data : {
+ . = ALIGN(16);
+ *(.sdata .sdata.*) /* do not need to distinguish this from .data */
+ . = ALIGN(16);
+ *(.data .data.*)
+ }
+
+ .bss : {
+ . = ALIGN(16);
+ _bss_start = .;
+ *(.sbss .sbss.*) /* do not need to distinguish this from .bss */
+ . = ALIGN(16);
+ *(.bss .bss.*)
+ _bss_end = .;
+ }
+
+ .stack : {
+ . = ALIGN(4096);
+ _sysstack_start = .;
+ . += 0x1000;
+ _sysstack_end = .;
+ }
+
+ PROVIDE(_end = .);
+}
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/plic.c b/ports/risc-v32/clang/example_build/qemu_virt/plic.c
new file mode 100644
index 000000000..01e5c71a4
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/plic.c
@@ -0,0 +1,72 @@
+#include "plic.h"
+#include
+irq_callback callbacks[MAX_CALLBACK_NUM];
+
+void plic_irq_enable(int irqno)
+{
+ int hart = riscv_get_core();
+ *(uint32_t*)PLIC_MENABLE(hart) = (*(uint32_t*)PLIC_MENABLE(hart) | (1 << irqno));
+ return;
+}
+
+void plic_irq_disable(int irqno)
+{
+ int hart = riscv_get_core();
+ *(uint32_t*)PLIC_MENABLE(hart) = (*(uint32_t*)PLIC_MENABLE(hart) & (~(1 << irqno)));
+ return;
+}
+
+void plic_prio_set(int irqno, int prio)
+{
+ PLIC_SET_PRIO(irqno, prio);
+}
+
+int plic_prio_get(int irqno)
+{
+ return PLIC_GET_PRIO(irqno);
+}
+
+int plic_register_callback(int irqno, irq_callback callback)
+{
+ if(!(irqno >=0 && irqno < MAX_CALLBACK_NUM))
+ return -1;
+ callbacks[irqno] = callback;
+ return 0;
+}
+
+int plic_unregister_callback(int irqno)
+{
+ return plic_register_callback(irqno, NULL);
+}
+
+int plic_init(void)
+{
+ for(int i=0;i
+
+#define PLIC 0x0c000000L
+#define PLIC_PRIORITY (PLIC + 0x0)
+#define PLIC_PENDING (PLIC + 0x1000)
+#define PLIC_MENABLE(hart) (PLIC + 0x2000 + (hart)*0x100)
+#define PLIC_SENABLE(hart) (PLIC + 0x2080 + (hart)*0x100)
+#define PLIC_MPRIORITY(hart) (PLIC + 0x200000 + (hart)*0x2000)
+#define PLIC_SPRIORITY(hart) (PLIC + 0x201000 + (hart)*0x2000)
+#define PLIC_MCLAIM(hart) (PLIC + 0x200004 + (hart)*0x2000)
+#define PLIC_SCLAIM(hart) (PLIC + 0x201004 + (hart)*0x2000)
+#define PLIC_MCOMPLETE(hart) (PLIC + 0x200004 + (hart)*0x2000)
+#define PLIC_SCOMPLETE(hart) (PLIC + 0x201004 + (hart)*0x2000)
+
+
+#define PLIC_GET_PRIO(irqno) (*(uint32_t *)(PLIC_PRIORITY + (irqno)*4))
+#define PLIC_SET_PRIO(irqno, prio) (*(uint32_t *)(PLIC_PRIORITY + (irqno)*4) = (prio))
+
+#define MAX_CALLBACK_NUM 128
+typedef int (*irq_callback)(int irqno);
+
+void plic_irq_enable(int irqno);
+void plic_irq_disable(int irqno);
+int plic_prio_get(int irqno);
+void plic_prio_set(int irqno, int prio);
+int plic_register_callback(int irqno, irq_callback callback);
+int plic_unregister_callback(int irqno);
+int plic_init(void);
+int plic_claim(void);
+void plic_complete(int irqno);
+
+int plic_irq_intr(void);
+
+#endif
+
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/trap.c b/ports/risc-v32/clang/example_build/qemu_virt/trap.c
new file mode 100644
index 000000000..a2733e02a
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/trap.c
@@ -0,0 +1,67 @@
+#include "csr.h"
+#include
+#include "uart.h"
+#include "hwtimer.h"
+#include "plic.h"
+#include
+#include
+
+#define OS_IS_INTERUPT(mcause) (mcause & 0x80000000u)
+#define OS_IS_EXCEPTION(mcause) (~(OS_IS_INTERUPT))
+#define OS_IS_TICK_INT(mcause) (mcause == 0x80000007u)
+#define OS_IS_SOFT_INT(mcause) (mcause == 0x80000003u)
+#define OS_IS_EXT_INT(mcause) (mcause == 0x8000000bu)
+#define OS_IS_TRAP_USER(mcause) (mcause == 0x0000000bu)
+extern void _tx_timer_interrupt(void);
+
+extern int uart_putc(int ch);
+
+static void print_hex(uintptr_t val)
+{
+ char digits[] = "0123456789ABCDEF";
+ uart_putc('0');
+ uart_putc('x');
+ for(int i = (sizeof(uintptr_t)*2) - 1; i >= 0; i--) {
+ int d = (val >> (i*4)) & 0xF;
+ uart_putc(digits[d]);
+ }
+ uart_putc('\n');
+}
+
+void trap_handler(uintptr_t mcause, uintptr_t mepc, uintptr_t mtval)
+{
+ // uart_puts("DEBUG : threadx/ports/risc-v32/gnu/example_build/qemu_virt/trap.c, trap_handler\n");
+ if(OS_IS_INTERUPT(mcause))
+ {
+ if(OS_IS_TICK_INT(mcause))
+ {
+ hwtimer_handler();
+ _tx_timer_interrupt();
+ }
+ else if(OS_IS_EXT_INT(mcause))
+ {
+ int ret = plic_irq_intr();
+ if(ret)
+ {
+ puts("[INTERRUPT]: handler irq error!");
+ while(1) ;
+ }
+ }
+ else
+ {
+ puts("[INTERRUPT]: now can't deal with the interrupt!");
+ while(1) ;
+ }
+ }
+ else
+ {
+ puts("[EXCEPTION] : Unkown Error!!");
+ puts("mcause:");
+ print_hex(mcause);
+ puts("mepc:");
+ print_hex(mepc);
+ puts("mtval:");
+ print_hex(mtval);
+ while(1) ;
+ }
+}
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/tx_initialize_low_level.S b/ports/risc-v32/clang/example_build/qemu_virt/tx_initialize_low_level.S
new file mode 100644
index 000000000..f3cd99a1a
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/tx_initialize_low_level.S
@@ -0,0 +1,172 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "csr.h"
+#include "tx_port.h"
+
+ .section .text
+ .align 4
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* trap_entry RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is responsible for riscv processor trap handle */
+/* It will do the contex save and call c trap_handler and do contex */
+/* load */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* trap_handler */
+/* */
+/* CALLED BY */
+/* */
+/* hardware exception */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Initialize */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+ .global trap_entry
+ .extern trap_handler
+ .extern _tx_thread_context_restore
+ trap_entry:
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, -65*4 // Allocate space for all registers - with floating point enabled
+#else
+ addi sp, sp, -32*4 // Allocate space for all registers - without floating point enabled
+#endif
+
+ sw x1, 28*4(sp) // Store RA, 28*4(because call will override ra [ra is a calle register in riscv])
+
+ call _tx_thread_context_save
+
+ csrr a0, mcause
+ csrr a1, mepc
+ csrr a2, mtval
+ addi sp, sp, -4
+ sw ra, 0(sp)
+ call trap_handler
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ call _tx_thread_context_restore
+ // it will nerver return
+_err:
+ wfi
+ j _err
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 26-02-2026 Francisco Merino Adapted for RV32 Clang */
+/* */
+/**************************************************************************/
+/* VOID _tx_initialize_low_level(VOID)
+{ */
+// .global _tx_initialize_low_level
+ .weak _tx_initialize_low_level
+ .extern _end
+ .extern board_init
+_tx_initialize_low_level:
+
+/* debug print
+ .section .rodata
+debug_str_init:
+ .string "DEBUG : threadx/ports/risc-v32/gnu/example_build/qemu_virt/tx_initialize_low_level.S, _tx_initialize_low_level\n"
+*/
+ .section .text
+
+ la t0, _tx_thread_system_stack_ptr
+ sw sp, 0(t0) // Save system stack pointer
+
+ la t0, _end // Pickup first free address
+ la t1, _tx_initialize_unused_memory
+ sw t0, 0(t1) // Save unused memory address
+ li t0, MSTATUS_MIE
+ csrrc zero, mstatus, t0 // clear MSTATUS_MIE bit
+ li t0, (MSTATUS_MPP_M | MSTATUS_MPIE )
+ csrrs zero, mstatus, t0 // set MSTATUS_MPP, MPIE bit
+ li t0, (MIE_MTIE | MIE_MSIE | MIE_MEIE)
+ csrrs zero, mie, t0 // set mie
+#ifdef __riscv_flen
+ li t0, MSTATUS_FS
+ csrrs zero, mstatus, t0 // set MSTATUS_FS bit to open f/d isa in riscv
+ fscsr x0
+#endif
+ addi sp, sp, -4
+ sw ra, 0(sp)
+ call board_init
+/* debug print
+ la a0, debug_str_init
+ call uart_puts
+*/
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ la t0, trap_entry
+ csrw mtvec, t0
+ ret
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/uart.c b/ports/risc-v32/clang/example_build/qemu_virt/uart.c
new file mode 100644
index 000000000..a175b7d25
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/uart.c
@@ -0,0 +1,102 @@
+#include "uart.h"
+#include "csr.h"
+#include "plic.h"
+#include
+
+// the UART control registers are memory-mapped
+// at address UART0. this macro returns the
+// address of one of the registers.
+#define Reg(reg) ((volatile unsigned char *)(UART0 + (reg)))
+
+// the UART control registers.
+// some have different meanings for
+// read vs write.
+// see http://byterunner.com/16550.html
+#define RHR 0 // receive holding register (for input bytes)
+#define THR 0 // transmit holding register (for output bytes)
+#define IER 1 // interrupt enable register
+#define IER_RX_ENABLE (1<<0)
+#define IER_TX_ENABLE (1<<1)
+#define FCR 2 // FIFO control register
+#define FCR_FIFO_ENABLE (1<<0)
+#define FCR_FIFO_CLEAR (3<<1) // clear the content of the two FIFOs
+#define ISR 2 // interrupt status register
+#define LCR 3 // line control register
+#define LCR_EIGHT_BITS (3<<0)
+#define LCR_BAUD_LATCH (1<<7) // special mode to set baud rate
+#define LSR 5 // line status register
+#define LSR_RX_READY (1<<0) // input is waiting to be read from RHR
+#define LSR_TX_IDLE (1<<5) // THR can accept another character to send
+
+#define ReadReg(reg) (*(Reg(reg)))
+#define WriteReg(reg, v) (*(Reg(reg)) = (v))
+
+int uart_init(void)
+{
+ // disable interrupts.
+ WriteReg(IER, 0x00);
+
+ // special mode to set baud rate.
+ WriteReg(LCR, LCR_BAUD_LATCH);
+
+ // LSB for baud rate of 38.4K.
+ WriteReg(0, 0x03);
+
+ // MSB for baud rate of 38.4K.
+ WriteReg(1, 0x00);
+
+ // leave set-baud mode,
+ // and set word length to 8 bits, no parity.
+ WriteReg(LCR, LCR_EIGHT_BITS);
+
+ // reset and enable FIFOs.
+ WriteReg(FCR, FCR_FIFO_ENABLE | FCR_FIFO_CLEAR);
+
+ // enable transmit and receive interrupts.
+ // WriteReg(IER, IER_TX_ENABLE | IER_RX_ENABLE);
+
+ //enable UART0 in PLIC
+ plic_irq_enable(UART0_IRQ);
+
+ //set UART0 priority in PLIC
+ plic_prio_set(UART0_IRQ, 1);
+
+ //register callback for UART0
+ //plic_register_callback(UART0_IRQ, uart_intr);
+ puts("[UART0] : Uart Init Done, this is Test output!");
+ return 0;
+}
+
+void uart_putc_nolock(int ch)
+{
+ // wait for Transmit Holding Empty to be set in LSR.
+ while((ReadReg(LSR) & LSR_TX_IDLE) == 0)
+ ;
+ WriteReg(THR, ch);
+ return;
+}
+
+int uart_putc(int ch)
+{
+ int intr_enable = riscv_mintr_get();
+ riscv_mintr_off();
+ uart_putc_nolock(ch);
+ riscv_mintr_restore(intr_enable);
+ return 1;
+}
+
+int uart_puts(const char* str)
+{
+ int i;
+ int intr_enable = riscv_mintr_get();
+ riscv_mintr_off();
+ for(i=0;str[i]!=0;i++)
+ {
+ uart_putc_nolock(str[i]);
+ }
+ uart_putc_nolock('\n');
+ riscv_mintr_restore(intr_enable);
+ return i;
+}
+
+
diff --git a/ports/risc-v32/clang/example_build/qemu_virt/uart.h b/ports/risc-v32/clang/example_build/qemu_virt/uart.h
new file mode 100644
index 000000000..debfd9dfa
--- /dev/null
+++ b/ports/risc-v32/clang/example_build/qemu_virt/uart.h
@@ -0,0 +1,23 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#ifndef RISCV_UART_H
+#define RISCV_UART_H
+
+#define UART0 0x10000000L
+#define UART0_IRQ 10
+
+#define puts uart_puts
+int uart_init(void);
+int uart_putc(int ch);
+void uart_putc_nolock(int ch);
+int uart_puts(const char* str);
+#endif
diff --git a/ports/risc-v32/clang/inc/tx_port.h b/ports/risc-v32/clang/inc/tx_port.h
new file mode 100644
index 000000000..f89c148c0
--- /dev/null
+++ b/ports/risc-v32/clang/inc/tx_port.h
@@ -0,0 +1,285 @@
+/***************************************************************************
+ * Copyright (c) 2025 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h RISC-V32/GNU */
+/* 6.4.x */
+/* */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
+/* */
+/**************************************************************************/
+
+#ifndef TX_PORT_H
+#define TX_PORT_H
+
+#ifndef __ASSEMBLER__
+
+/* Include for memset. */
+#include
+
+
+/* Determine if the optional ThreadX user define file should be used. */
+
+#ifdef TX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in tx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "tx_user.h"
+#endif /* TX_INCLUDE_USER_DEFINE_FILE */
+
+#endif /* __ASSEMBLER__ */
+
+
+/* Define ThreadX basic types for this port. */
+
+#define VOID void
+
+#ifndef __ASSEMBLER__
+typedef char CHAR;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef unsigned long long ULONG64;
+typedef short SHORT;
+typedef unsigned short USHORT;
+#define ULONG64_DEFINED
+#endif /* __ASSEMBLER__ */
+
+
+
+
+/* Define the priority levels for ThreadX. Legal values range
+ from 32 to 1024 and MUST be evenly divisible by 32. */
+
+#ifndef TX_MAX_PRIORITIES
+#define TX_MAX_PRIORITIES 32
+#endif
+
+
+/* Define the minimum stack for a ThreadX thread on this processor. If the size supplied during
+ thread creation is less than this value, the thread create call will return an error. */
+
+#ifndef TX_MINIMUM_STACK
+#define TX_MINIMUM_STACK 1024 /* Minimum stack size for this port */
+#endif
+
+
+/* Define the system timer thread's default stack size and priority. These are only applicable
+ if TX_TIMER_PROCESS_IN_ISR is not defined. */
+
+#ifndef TX_TIMER_THREAD_STACK_SIZE
+#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
+#endif
+
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#endif
+
+
+/* Define various constants for the ThreadX RISC-V port. */
+
+#define TX_INT_DISABLE 0x00000000 /* Disable interrupts value */
+#define TX_INT_ENABLE 0x00000008 /* Enable interrupt value */
+
+
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ source constants would be:
+
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
+#define TX_TRACE_TIME_MASK 0x0000FFFFUL
+
+*/
+
+#ifndef TX_TRACE_TIME_SOURCE
+#define TX_TRACE_TIME_SOURCE ++_tx_trace_simulated_time
+#endif
+#ifndef TX_TRACE_TIME_MASK
+#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
+#endif
+
+
+/* Define the port specific options for the _tx_build_options variable. This variable indicates
+ how the ThreadX library was built. */
+
+#define TX_PORT_SPECIFIC_BUILD_OPTIONS 0
+
+
+/* Define the in-line initialization constant so that modules with in-line
+ initialization capabilities can prevent their initialization from being
+ a function call. */
+
+#define TX_INLINE_INITIALIZATION
+
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+#ifdef TX_ENABLE_STACK_CHECKING
+#undef TX_DISABLE_STACK_FILLING
+#endif
+
+
+/* Define the TX_THREAD control block extensions for this port. The main reason
+ for the multiple macros is so that backward compatibility can be maintained with
+ existing ThreadX kernel awareness modules. */
+
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
+
+
+/* Define the port extensions of the remaining ThreadX objects. */
+
+#define TX_BLOCK_POOL_EXTENSION
+#define TX_BYTE_POOL_EXTENSION
+#define TX_EVENT_FLAGS_GROUP_EXTENSION
+#define TX_MUTEX_EXTENSION
+#define TX_QUEUE_EXTENSION
+#define TX_SEMAPHORE_EXTENSION
+#define TX_TIMER_EXTENSION
+
+
+/* Define the user extension field of the thread control block. Nothing
+ additional is needed for this port so it is defined as white space. */
+
+#ifndef TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
+#endif
+
+
+/* Define the macros for processing extensions in tx_thread_create, tx_thread_delete,
+ tx_thread_shell_entry, and tx_thread_terminate. */
+
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+
+
+/* Define the ThreadX object creation extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_CREATE_EXTENSION(group_ptr)
+#define TX_MUTEX_CREATE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_CREATE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_CREATE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_CREATE_EXTENSION(timer_ptr)
+
+
+/* Define the ThreadX object deletion extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_DELETE_EXTENSION(group_ptr)
+#define TX_MUTEX_DELETE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_DELETE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_DELETE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
+
+
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
+ present prior to the disable macro. In most cases, the save area macro
+ is used to define a local function save area for the disable and restore
+ macros. */
+
+/* Expose helper used to perform an atomic read/modify/write of mstatus.
+ The helper composes and returns the posture per ThreadX contract. */
+#ifndef __ASSEMBLER__
+UINT _tx_thread_interrupt_control(UINT new_posture);
+#endif
+
+#ifdef TX_DISABLE_INLINE
+
+#define TX_INTERRUPT_SAVE_AREA register UINT interrupt_save;
+
+#define TX_DISABLE __asm__ volatile("csrrci %0, mstatus, 8" : "=r" (interrupt_save) :: "memory");
+#define TX_RESTORE { \
+ unsigned long _temp_mstatus; \
+ __asm__ volatile( \
+ "csrc mstatus, 8\n" \
+ "andi %0, %1, 8\n" \
+ "csrs mstatus, %0" \
+ : "=&r" (_temp_mstatus) \
+ : "r" (interrupt_save) \
+ : "memory"); \
+ }
+
+#else
+
+#define TX_INTERRUPT_SAVE_AREA register UINT interrupt_save;
+
+#define TX_DISABLE interrupt_save = _tx_thread_interrupt_control(TX_INT_DISABLE);
+#define TX_RESTORE _tx_thread_interrupt_control(interrupt_save);
+
+#endif /* TX_DISABLE_INLINE */
+
+
+/* Define the interrupt lockout macros for each ThreadX object. */
+
+#define TX_BLOCK_POOL_DISABLE TX_DISABLE
+#define TX_BYTE_POOL_DISABLE TX_DISABLE
+#define TX_EVENT_FLAGS_GROUP_DISABLE TX_DISABLE
+#define TX_MUTEX_DISABLE TX_DISABLE
+#define TX_QUEUE_DISABLE TX_DISABLE
+#define TX_SEMAPHORE_DISABLE TX_DISABLE
+
+
+/* Define the version ID of ThreadX. This may be utilized by the application. */
+
+#ifndef __ASSEMBLER__
+#ifdef TX_THREAD_INIT
+CHAR _tx_version_id[] =
+ "(c) 2024 Microsoft Corp. (c) 2026-present Eclipse ThreadX contributors. * ThreadX RISC-V32/GNU Version 6.5.0.202601 *";
+#else
+extern CHAR _tx_version_id[];
+#endif /* TX_THREAD_INIT */
+#endif /* __ASSEMBLER__ */
+
+#endif /* TX_PORT_H */
\ No newline at end of file
diff --git a/ports/risc-v32/clang/readme_threadx.txt b/ports/risc-v32/clang/readme_threadx.txt
new file mode 100644
index 000000000..ce8385532
--- /dev/null
+++ b/ports/risc-v32/clang/readme_threadx.txt
@@ -0,0 +1,442 @@
+ Eclipse Foundation's RTOS, ThreadX for RISC-V32
+
+ Using the Clang Tools
+
+
+1. Building the ThreadX run-time Library
+
+Prerequisites
+- Install a RISC-V32 bare-metal Clang toolchain
+- Install a RISC-V32 bare-metal GNU toolchain with riscv32-unknown-elf prefix.
+ Common source: https://github.com/riscv-collab/riscv-gnu-toolchain
+
+The GNU toolchain is needed because the Clang toolchain does not include some
+standard headers and libraries, i.e. "string.h".
+
+Verify the Clang toolchain:
+ clang --version
+
+Verify the GCC toolchain:
+ riscv32-unknown-elf-gcc --version
+ riscv32-unknown-elf-objdump --version
+
+CMake-based build (recommended)
+
+From the ThreadX top-level directory:
+
+ Set environment variable "GCC_INSTALL_PREFIX" with the location of the
+ GNU toolchain, i.e., export GCC_INSTALL_PREFIX=/opt/riscv_rv32ima
+
+ cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=cmake/riscv32_clang.cmake .
+ cmake --build ./build/
+
+This uses cmake/riscv32_clang.cmake and ports/risc-v32/clang/CMakeLists.txt to
+configure the cross-compiler flags and produce the ThreadX run-time library
+and example binaries.
+
+Example build script
+
+The example demonstration contains a build script. See:
+
+ ports/risc-v32/clang/example_build/qemu_virt/build_libthreadx.sh
+
+This script builds the library and the demo application kernel.elf.
+
+
+2. Demonstration System (QEMU)
+
+The provided example is targeted at QEMU's virt platform. After building the
+example, the produced kernel.elf can be executed in QEMU:
+
+ qemu-system-riscv32 -nographic -smp 1 -bios none -m 128M -machine virt -kernel kernel.elf
+
+Typical QEMU features used:
+- Single-core CPU
+- UART serial console
+- PLIC (Platform-Level Interrupt Controller)
+- CLINT (Core-Local Interruptor) for timer
+
+
+3. System Initialization
+
+Entry Point
+
+The example startup code begins at the _start label in entry.s. This startup
+code performs hardware initialization including:
+- Check hart ID (only hart 0 continues; others enter WFI loop)
+- Zero general-purpose registers
+- Set up initial stack pointer
+- Clear BSS section
+- Jump to main()
+
+Low-Level Port Initialization (tx_initialize_low_level.S)
+
+The _tx_initialize_low_level function:
+- Saves the system stack pointer to _tx_thread_system_stack_ptr
+- Records first free RAM address from __tx_free_memory_start symbol
+- Initializes floating-point control/status register (FCSR) if floating point enabled
+
+Board Initialization (board.c)
+
+After tx_initialize_low_level returns, main() calls board_init() to:
+- Initialize PLIC (Platform-Level Interrupt Controller)
+- Initialize UART
+- Initialize hardware timer (CLINT)
+- Set trap vector (mtvec) to point to trap handler
+
+
+4. Register Usage and Stack Frames
+
+The RISC-V32 ABI defines t0-t6 and a0-a7 as caller-saved (scratch) registers.
+All other registers used by a function must be preserved by the function.
+
+ThreadX takes advantage of this: when a context switch happens during a
+function call, only the non-scratch registers need to be saved.
+
+Stack Frame Types
+
+Two types of stack frames exist:
+
+A. Interrupt Frame (stack type = 1)
+ Created when an interrupt occurs during thread execution.
+ Saves all registers including caller-saved registers.
+ Size: 65*4 = 260 bytes (with FP), or 32*4 = 128 bytes (without FP)
+
+B. Solicited Frame (stack type = 0)
+ Created when a thread voluntarily yields via ThreadX service calls.
+ Saves only callee-saved registers (s0-s11) and mstatus.
+ Size: 29*4 = 116 bytes (with FP), or 16*4 = 64 bytes (without FP)
+
+
+Stack Layout for Interrupt Frame (with FP enabled):
+
+ Index Offset Register Description
+ ─────────────────────────────────────────────────
+ 0 0x00 -- Stack type (1 = interrupt)
+ 1 0x04 s11 Preserved register
+ 2 0x08 s10 Preserved register
+ 3 0x0C s9 Preserved register
+ 4 0x10 s8 Preserved register
+ 5 0x14 s7 Preserved register
+ 6 0x18 s6 Preserved register
+ 7 0x1C s5 Preserved register
+ 8 0x20 s4 Preserved register
+ 9 0x24 s3 Preserved register
+ 10 0x28 s2 Preserved register
+ 11 0x2C s1 Preserved register
+ 12 0x30 s0 Preserved register
+ 13 0x34 t6 Scratch register
+ 14 0x38 t5 Scratch register
+ 15 0x3C t4 Scratch register
+ 16 0x40 t3 Scratch register
+ 17 0x44 t2 Scratch register
+ 18 0x48 t1 Scratch register
+ 19 0x4C t0 Scratch register
+ 20 0x50 a7 Argument register
+ 21 0x54 a6 Argument register
+ 22 0x58 a5 Argument register
+ 23 0x5C a4 Argument register
+ 24 0x60 a3 Argument register
+ 25 0x64 a2 Argument register
+ 26 0x68 a1 Argument register
+ 27 0x6C a0 Argument register
+ 28 0x70 ra Return address
+ 29 0x74 -- Reserved
+ 30 0x78 mepc Machine exception PC
+ 31-46 0x7C-0xB8 fs0-fs7 Preserved FP registers*
+ 47-62 0xBC-0xF8 ft0-ft11 Scratch FP registers*
+ 63 0xFC fcsr FP control/status register
+ ─────────────────────────────────────────────────
+ *Note: In ilp32d ABI, FP registers are 8 bytes each, but current
+ port implementation uses 4-byte indexing which may cause
+ overlap if fsd/fld are used.
+
+
+5. Interrupt Handling
+
+Machine Mode Operation
+
+ThreadX operates in machine mode (M-mode), the highest privilege level.
+All interrupts and exceptions trap to machine mode.
+
+Interrupt Sources
+
+1. Machine Timer Interrupt (MTI):
+ - Triggered by CLINT when mtime >= mtimecmp
+ - Handled by _tx_timer_interrupt (src/tx_timer_interrupt.S)
+ - Called from trap handler in trap.c
+
+2. External Interrupts (MEI):
+ - Routed through PLIC
+ - Handler in trap.c calls registered ISR callbacks
+
+3. Software Interrupts (MSI):
+ - Supported but not actively used in this port
+
+Interrupt Flow
+
+1. Hardware trap entry (automatic):
+ - mepc <- PC (address of interrupted instruction)
+ - mcause <- exception/interrupt code
+ - mstatus.MPIE <- mstatus.MIE (save interrupt-enable state)
+ - mstatus.MIE <- 0 (disable interrupts)
+ - mstatus.MPP <- Machine mode
+ - PC <- mtvec (points to trap_entry in entry.s)
+
+2. Trap entry (entry.s):
+ - Allocates interrupt stack frame (32*4 or 65*4 bytes depending on FP)
+ - Saves RA (x1) on stack
+ - Calls _tx_thread_context_save
+
+3. Context save (_tx_thread_context_save.S):
+ - Increments _tx_thread_system_state (nested interrupt counter)
+ - If nested interrupt: saves remaining registers and returns to ISR
+ - If first interrupt: saves full context, switches to system stack
+
+4. Trap handler (trap.c):
+ - Examines mcause to determine interrupt type
+ - Dispatches to appropriate handler (_tx_timer_interrupt or PLIC handler)
+ - Returns to context restore
+
+5. Context restore (_tx_thread_context_restore.S):
+ - Decrements _tx_thread_system_state
+ - Checks if preemption needed
+ - Restores thread context or switches to next ready thread via scheduler
+ - Returns to interrupted thread or executes new thread
+
+
+Interrupt Control Macros
+
+TX_DISABLE and TX_RESTORE macros atomically manage the MIE bit in mstatus:
+
+ TX_DISABLE: Saves and clears MIE bit via csrrci (CSR read-clear immediate)
+ TX_RESTORE: Restores only MIE bit via csrrs (CSR read-set)
+ Other mstatus bits remain unchanged
+
+These are defined in ports/risc-v32/gnu/inc/tx_port.h and use the
+_tx_thread_interrupt_control() function.
+
+
+6. Thread Scheduling and Context Switching
+
+Thread Scheduler (src/tx_thread_schedule.S)
+
+The scheduler:
+1. Enables interrupts while waiting for next thread
+2. Spins until _tx_thread_execute_ptr becomes non-NULL
+3. Disables interrupts (critical section)
+4. Sets _tx_thread_current_ptr = _tx_thread_execute_ptr
+5. Increments thread's run count
+6. Switches to thread's stack
+7. Determines stack frame type and restores context:
+ - Interrupt frame: full context restored, returns via mret
+ - Solicited frame: minimal context restored, returns via ret
+
+Initial Thread Stack Frame (src/tx_thread_stack_build.S)
+
+New threads start with a fake interrupt frame containing:
+- All registers initialized to 0
+- ra (x1) = 0
+- mepc = entry function pointer
+- Stack type = 1 (interrupt frame)
+- Floating-point registers initialized based on ABI
+
+
+7. Port Configuration and Macros
+
+Default Configurations (in ports/risc-v32/gnu/inc/tx_port.h):
+
+ TX_MINIMUM_STACK 1024 /* Minimum thread stack size */
+ TX_TIMER_THREAD_STACK_SIZE 1024 /* Timer thread stack size */
+ TX_TIMER_THREAD_PRIORITY 0 /* Timer thread priority */
+ TX_MAX_PRIORITIES 32 /* Must be multiple of 32 */
+
+These can be overridden in tx_user.h or on the compiler command line.
+
+
+8. Build Configuration
+
+CMake Toolchain File: cmake/riscv32_gnu.cmake
+
+Compiler Flags:
+ -march=rv32gc RV32 with IMAFD+C extensions
+ -mabi=ilp32d 32-bit integers/pointers, double-precision FP in registers
+ -mcmodel=medany ±2GB addressability
+ -D__ASSEMBLER__ For assembly files
+
+ABI Selection
+
+The port uses ilp32d ABI which includes:
+- 32-bit integers and pointers
+- Double-precision floating-point arguments in registers
+- Floating-point registers f0-f31
+
+When building with floating-point ABI:
+- FP registers and FCSR are saved/restored in context switches
+- Stack frames expand from 32*REGBYTES to 65*REGBYTES
+- Conditional compilation uses __riscv_float_abi_double / __riscv_float_abi_single
+
+
+9. File Organization
+
+Port-specific files (ports/risc-v32/gnu/):
+
+Core assembly files (src/):
+ - tx_initialize_low_level.S Initial setup and system state
+ - tx_thread_context_save.S Save context on interrupt entry
+ - tx_thread_context_restore.S Restore context on interrupt exit
+ - tx_thread_schedule.S Thread scheduler
+ - tx_thread_system_return.S Solicited context save for voluntary yield
+ - tx_thread_stack_build.S Build initial stack frame for new thread
+ - tx_thread_interrupt_control.S Interrupt enable/disable control
+ - tx_timer_interrupt.S Timer interrupt handler
+
+Header file (inc/):
+ - tx_port.h Port-specific defines and macros
+
+Example files (example_build/qemu_virt/):
+ - entry.s Startup code, trap entry point
+ - board.c, uart.c, hwtimer.c Platform-specific initialization
+ - plic.c PLIC interrupt controller driver
+ - trap.c Trap/exception dispatcher
+ - link.lds Linker script for QEMU virt
+ - build_libthreadx.sh Build script
+
+
+10. Linker Script Requirements
+
+The linker script must provide:
+
+1. Entry point:
+ ENTRY(_start)
+
+2. Memory layout:
+ - .text section (code)
+ - .rodata section (read-only data)
+ - .data section (initialized data)
+ - .bss section (uninitialized data)
+
+3. Symbols:
+ - _end: First free memory address (used by ThreadX allocation)
+ - _bss_start, _bss_end: For zero initialization
+ - Initial stack space (example: 4KB)
+
+4. Alignment:
+ - 16-byte alignment throughout (RISC-V requirement)
+
+Example from QEMU virt build:
+
+ SECTIONS
+ {
+ . = 0x80000000; /* QEMU virt base address */
+
+ .text : { *(.text .text.*) }
+ .rodata : { *(.rodata .rodata.*) }
+ .data : { *(.data .data.*) }
+ .bss : { *(.bss .bss.*) }
+
+ .stack : {
+ . = ALIGN(4096);
+ _sysstack_start = .;
+ . += 0x1000; /* 4KB initial stack */
+ _sysstack_end = .;
+ }
+
+ PROVIDE(_end = .);
+ }
+
+
+11. Floating-Point Support
+
+When building with ilp32d ABI and FP enabled:
+
+- FP registers f0-f31 and FCSR are saved/restored during context switches
+- Stack frames increase from 32*REGBYTES to 65*REGBYTES (128 to 260 bytes)
+- MSTATUS.FS (floating-point state) field is set to indicate dirty FP state
+
+Stack frame differences:
+- Without FP: 32*4 = 128 bytes (interrupt), 16*4 = 64 bytes (solicited)
+- With FP: 65*4 = 260 bytes (interrupt), 29*4 = 116 bytes (solicited)
+
+
+12. Performance and Debugging
+
+Performance Optimization
+
+Build optimizations:
+- Use -O2 or -O3 for production (example uses -O0 for debugging)
+- Enable -Wl,--gc-sections to remove unused code
+- Define TX_DISABLE_ERROR_CHECKING to remove parameter checks
+- Consider -flto for link-time optimization
+
+Debugging with QEMU and GDB
+
+Start QEMU in debug mode:
+ qemu-system-riscv32 -nographic -smp 1 -bios none -m 128M \
+ -machine virt -kernel kernel.elf -s -S
+
+ -s: Enable GDB server on TCP port 1234
+ -S: Pause at startup waiting for GDB
+
+Connect GDB:
+ riscv32-unknown-elf-gdb kernel.elf
+ (gdb) target remote :1234
+ (gdb) break main
+ (gdb) continue
+
+Useful GDB commands:
+ (gdb) info registers # View general registers
+ (gdb) info all-registers # Include CSR and FP registers
+ (gdb) p/x $mstatus # View machine status register
+ (gdb) x/32xw $sp # Examine stack memory
+ (gdb) p *_tx_thread_current_ptr # View current thread control block
+
+
+13. Platform-Specific Notes (QEMU virt)
+
+PLIC Configuration
+
+The PLIC (Platform-Level Interrupt Controller) is memory-mapped at 0x0C000000:
+
+- Enables up to 1024 interrupt sources
+- Supports priority levels 0-7 (0 = disabled)
+- Requires per-hart priority threshold and enable register configuration
+
+Example PLIC usage (from plic.c):
+ plic_irq_enable(irq_number); # Enable specific interrupt
+ plic_prio_set(irq_number, priority);# Set priority level
+
+CLINT Configuration
+
+The CLINT (Core-Local Interruptor) is memory-mapped at 0x02000000:
+
+- CLINT_MSIP(hartid): 0x0000 + 4*hartid (software interrupt)
+- CLINT_MTIMECMP(hartid): 0x4000 + 8*hartid (timer compare)
+- CLINT_MTIME: 0xBFF8 (timer value, read-only)
+
+Timer frequency is platform-dependent (example uses 10MHz).
+
+Multi-Core Considerations
+
+The current port is single-core focused:
+- Only hart 0 continues from reset; others enter WFI loop
+- _tx_thread_system_state is a global variable
+- No per-hart data structures
+
+
+14. Revision History
+
+For generic code revision information, refer to readme_threadx_generic.txt.
+
+The following details the revision history for this RISC-V32 GNU port:
+
+01-26-2026 Akif Ejaz Brief rewrite with accurate
+ technical details matching implementation,
+ register naming per RISC-V ABI, and
+ complete interrupt flow documentation
+ (Adapted from RISC-V64 port)
+
+
+Copyright (c) 1996-2026 Microsoft Corporation
+
+https://azure.com/rtos
diff --git a/ports/risc-v64/gnu/src/tx_timer_interrupt.c b/ports/risc-v32/clang/src/tx_initialize_low_level.S
similarity index 50%
rename from ports/risc-v64/gnu/src/tx_timer_interrupt.c
rename to ports/risc-v32/clang/src/tx_initialize_low_level.S
index 3c90d0a61..467c37355 100644
--- a/ports/risc-v64/gnu/src/tx_timer_interrupt.c
+++ b/ports/risc-v32/clang/src/tx_initialize_low_level.S
@@ -1,10 +1,10 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
- *
+ * Copyright (c) 2026 Quintauris
+ *
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
- *
+ *
* SPDX-License-Identifier: MIT
**************************************************************************/
@@ -14,36 +14,34 @@
/** */
/** ThreadX Component */
/** */
-/** Timer */
+/** Initialize */
/** */
/**************************************************************************/
/**************************************************************************/
-#define TX_SOURCE_CODE
+ .section .data
+ .global __tx_free_memory_start
+__tx_free_memory_start:
-/* Include necessary system files. */
-
-#include "tx_api.h"
-#include "tx_timer.h"
-#include "tx_thread.h"
+ .section .text
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
-/* _tx_timer_interrupt RISC-V64/GNU */
-/* 6.2.1 */
+/* _tx_initialize_low_level RISC-V32/GNU */
+/* 6.4.x */
/* AUTHOR */
/* */
-/* Scott Larson, Microsoft Corporation */
+/* Francisco Merino, Quintauris */
/* */
/* DESCRIPTION */
/* */
-/* This function processes the hardware timer interrupt. This */
-/* processing includes incrementing the system clock and checking for */
-/* time slice and/or timer expiration. If either is found, the */
-/* interrupt context save/restore functions are called along with the */
-/* expiration functions. */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
/* */
/* INPUT */
/* */
@@ -55,80 +53,60 @@
/* */
/* CALLS */
/* */
-/* _tx_timer_expiration_process Timer expiration processing */
-/* _tx_thread_time_slice Time slice interrupted thread */
+/* None */
/* */
/* CALLED BY */
/* */
-/* interrupt vector */
-/* */
-/* RELEASE HISTORY */
-/* */
-/* DATE NAME DESCRIPTION */
-/* */
-/* 03-08-2023 Scott Larson Initial Version 6.2.1 */
+/* _tx_initialize_kernel_enter ThreadX entry function */
/* */
/**************************************************************************/
-VOID _tx_timer_interrupt(VOID)
-{
- /* Increment system clock. */
- _tx_timer_system_clock++;
-
- /* Test for time-slice expiration. */
- if (_tx_timer_time_slice)
- {
- /* Decrement the time_slice. */
- _tx_timer_time_slice--;
-
- /* Check for expiration. */
- if (_tx_timer_time_slice == 0)
- {
-
- /* Set the time-slice expired flag. */
- _tx_timer_expired_time_slice = TX_TRUE;
- }
- }
-
- /* Test for timer expiration. */
- if (*_tx_timer_current_ptr)
- {
-
- /* Set expiration flag. */
- _tx_timer_expired = TX_TRUE;
- }
- else
- {
-
- /* No timer expired, increment the timer pointer. */
- _tx_timer_current_ptr++;
-
- /* Check for wrap-around. */
- if (_tx_timer_current_ptr == _tx_timer_list_end)
- {
-
- /* Wrap to beginning of list. */
- _tx_timer_current_ptr = _tx_timer_list_start;
- }
- }
-
- /* See if anything has expired. */
- if ((_tx_timer_expired_time_slice) || (_tx_timer_expired))
- {
-
- /* Did a timer expire? */
- if (_tx_timer_expired)
- {
-
- /* Process timer expiration. */
- _tx_timer_expiration_process();
- }
-
- /* Did time slice expire? */
- if (_tx_timer_expired_time_slice)
- {
-
- /* Time slice interrupted thread. */
- _tx_thread_time_slice();
- }
- }
-}
+/* VOID _tx_initialize_low_level(VOID)
+{ */
+// .global _tx_initialize_low_level
+ .weak _tx_initialize_low_level
+_tx_initialize_low_level:
+
+ /* Save the system stack pointer. */
+ /* _tx_thread_system_stack_ptr = sp; */
+
+ la t0, _tx_thread_system_stack_ptr // Pickup address of system stack ptr
+ sw sp, 0(t0) // Save system stack pointer
+
+ /* Pickup first free address. */
+ /* _tx_initialize_unused_memory(__tx_free_memory_start); */
+
+ la t0, __tx_free_memory_start // Pickup first free address
+ la t1, _tx_initialize_unused_memory // Pickup address of unused memory
+ sw t0, 0(t1) // Save unused memory address
+
+ /* Initialize floating point control/status register if floating point is enabled. */
+#ifdef __riscv_flen
+ li t0, 0
+ csrw fcsr, t0 // Clear FP control/status register
+#endif
+
+ ret
+
+/* Timer Interrupt Handler Note:
+ Platform-specific implementations must provide their own timer ISR.
+ The timer interrupt handler should follow this execution flow:
+
+ 1. Disable interrupts (if not done by hardware exception entry)
+ 2. Allocate interrupt stack frame (65*4 bytes with FP, 32*4 bytes without)
+ 3. Save RA (x1) on the stack at offset 28*4
+ 4. Call _tx_thread_context_save to save thread context
+ 5. Call _tx_timer_interrupt to process the timer tick
+ 6. Call _tx_thread_context_restore to resume execution (does not return)
+
+ Example (for CLINT timer):
+
+ _tx_timer_interrupt_handler:
+ addi sp, sp, -32*4
+ sw ra, 28*4(sp)
+ call _tx_thread_context_save
+ call _tx_timer_interrupt
+ j _tx_thread_context_restore
+
+ The port assumes Machine mode (M-mode) execution.
+ For Supervisor mode (S-mode), use sstatus and SIE/SPIE instead of mstatus.
+ See the RISC-V Privileged Specification for more details. */
\ No newline at end of file
diff --git a/ports/risc-v32/clang/src/tx_thread_context_restore.S b/ports/risc-v32/clang/src/tx_thread_context_restore.S
new file mode 100644
index 000000000..88ac0ce34
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_context_restore.S
@@ -0,0 +1,410 @@
+/***************************************************************************
+ * Copyright (c) 2025 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_restore RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function restores the interrupt context if it is processing a */
+/* nested interrupt. If not, it returns to the interrupt thread if no */
+/* preemption is necessary. Otherwise, if preemption is necessary or */
+/* if no thread was running, the function returns to the scheduler. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_schedule Thread scheduling routine */
+/* */
+/* CALLED BY */
+/* */
+/* ISRs Interrupt Service Routines */
+/* */
+/**************************************************************************/
+/* VOID _tx_thread_context_restore(VOID)
+{ */
+ .global _tx_thread_context_restore
+_tx_thread_context_restore:
+
+ /* Lockout interrupts. */
+
+ csrci mstatus, 0x08 // Disable interrupts (MIE bit 3)
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ call _tx_execution_isr_exit // Call the ISR execution exit function
+#endif
+
+ /* Determine if interrupts are nested. */
+ /* if (--_tx_thread_system_state)
+ { */
+
+ la t0, _tx_thread_system_state // Pickup addr of nested interrupt count
+ lw t1, 0(t0) // Pickup nested interrupt count
+ addi t1, t1, -1 // Decrement the nested interrupt counter
+ sw t1, 0(t0) // Store new nested count
+ beqz t1, _tx_thread_not_nested_restore // If 0, not nested restore
+
+ /* Interrupts are nested. */
+
+ /* Just recover the saved registers and return to the point of
+ interrupt. */
+
+ /* Recover floating point registers. */
+#if defined(__riscv_float_abi_single)
+ flw f0, 31*4(sp) // Recover ft0
+ flw f1, 32*4(sp) // Recover ft1
+ flw f2, 33*4(sp) // Recover ft2
+ flw f3, 34*4(sp) // Recover ft3
+ flw f4, 35*4(sp) // Recover ft4
+ flw f5, 36*4(sp) // Recover ft5
+ flw f6, 37*4(sp) // Recover ft6
+ flw f7, 38*4(sp) // Recover ft7
+ flw f10, 41*4(sp) // Recover fa0
+ flw f11, 42*4(sp) // Recover fa1
+ flw f12, 43*4(sp) // Recover fa2
+ flw f13, 44*4(sp) // Recover fa3
+ flw f14, 45*4(sp) // Recover fa4
+ flw f15, 46*4(sp) // Recover fa5
+ flw f16, 47*4(sp) // Recover fa6
+ flw f17, 48*4(sp) // Recover fa7
+ flw f28, 59*4(sp) // Recover ft8
+ flw f29, 60*4(sp) // Recover ft9
+ flw f30, 61*4(sp) // Recover ft10
+ flw f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#elif defined(__riscv_float_abi_double)
+ fld f0, 31*4(sp) // Recover ft0
+ fld f1, 32*4(sp) // Recover ft1
+ fld f2, 33*4(sp) // Recover ft2
+ fld f3, 34*4(sp) // Recover ft3
+ fld f4, 35*4(sp) // Recover ft4
+ fld f5, 36*4(sp) // Recover ft5
+ fld f6, 37*4(sp) // Recover ft6
+ fld f7, 38*4(sp) // Recover ft7
+ fld f10, 41*4(sp) // Recover fa0
+ fld f11, 42*4(sp) // Recover fa1
+ fld f12, 43*4(sp) // Recover fa2
+ fld f13, 44*4(sp) // Recover fa3
+ fld f14, 45*4(sp) // Recover fa4
+ fld f15, 46*4(sp) // Recover fa5
+ fld f16, 47*4(sp) // Recover fa6
+ fld f17, 48*4(sp) // Recover fa7
+ fld f28, 59*4(sp) // Recover ft8
+ fld f29, 60*4(sp) // Recover ft9
+ fld f30, 61*4(sp) // Recover ft10
+ fld f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#endif
+
+ /* Recover standard registers. */
+
+ /* Restore registers,
+ Skip global pointer because that does not change.
+ Also skip the saved registers since they have been restored by any function we called,
+ except s0 since we use it ourselves. */
+
+ lw t0, 30*4(sp) // Recover mepc
+ csrw mepc, t0 // Setup mepc
+
+ /* Compose mstatus via read/modify/write to avoid clobbering unrelated bits.
+ Set MPIE and restore MPP to Machine, preserve other fields. */
+
+ csrr t1, mstatus
+
+ /* Clear MPP/MPIE/MIE bits in t1 then set desired values. */
+
+ li t2, 0x1888 // MPP(0x1800) | MPIE(0x80) | MIE(0x08)
+ li t3, 0x1800 // Set MPP to Machine mode (bits 12:11)
+
+ /* Construct new mstatus in t1: clear mask bits, set MPP/MPIE and optionally FP bit,
+ preserve everything except the bits we will modify. */
+
+ li t4, ~0x1888 // Clear mask for MPP/MPIE/MIE
+ and t1, t1, t4
+ or t1, t1, t3
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ li t0, 0x2000 // Set FS bits (bits 14:13 to 01) for FP state
+ or t1, t1, t0
+#endif
+ csrw mstatus, t1 // Update mstatus safely
+
+ lw ra, 28*4(sp) // Recover return address
+ lw t0, 19*4(sp) // Recover t0
+ lw t1, 18*4(sp) // Recover t1
+ lw t2, 17*4(sp) // Recover t2
+ lw s0, 12*4(sp) // Recover s0
+ lw a0, 27*4(sp) // Recover a0
+ lw a1, 26*4(sp) // Recover a1
+ lw a2, 25*4(sp) // Recover a2
+ lw a3, 24*4(sp) // Recover a3
+ lw a4, 23*4(sp) // Recover a4
+ lw a5, 22*4(sp) // Recover a5
+ lw a6, 21*4(sp) // Recover a6
+ lw a7, 20*4(sp) // Recover a7
+ lw t3, 16*4(sp) // Recover t3
+ lw t4, 15*4(sp) // Recover t4
+ lw t5, 14*4(sp) // Recover t5
+ lw t6, 13*4(sp) // Recover t6
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, 65*4 // Recover stack frame - with floating point enabled
+#else
+ addi sp, sp, 32*4 // Recover stack frame - without floating point enabled
+#endif
+ mret // Return to point of interrupt
+
+ /* } */
+_tx_thread_not_nested_restore:
+ /* Determine if a thread was interrupted and no preemption is required. */
+ /* else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+ || (_tx_thread_preempt_disable))
+ { */
+
+ la t0, _tx_thread_current_ptr // Pickup current thread pointer address
+ lw t1, 0(t0) // Pickup current thread pointer
+
+ beqz t1, _tx_thread_idle_system_restore // If NULL, idle system restore
+
+
+ la t0, _tx_thread_preempt_disable // Pickup preempt disable flag address
+ lw t2, 0(t0) // Pickup preempt disable flag (UINT)
+
+ bgtz t2, _tx_thread_no_preempt_restore // If set, restore interrupted thread
+
+
+ la t0, _tx_thread_execute_ptr // Pickup thread execute pointer address
+ lw t2, 0(t0) // Pickup thread execute pointer
+
+ bne t1, t2, _tx_thread_preempt_restore // If higher-priority thread is ready, preempt
+
+
+_tx_thread_no_preempt_restore:
+ /* Restore interrupted thread or ISR. */
+
+ /* Pickup the saved stack pointer. */
+ /* sp = _tx_thread_current_ptr -> tx_thread_stack_ptr; */
+
+ lw sp, 8(t1) // Switch back to thread's stack
+
+ /* Recover floating point registers. */
+#if defined(__riscv_float_abi_single)
+ flw f0, 31*4(sp) // Recover ft0
+ flw f1, 32*4(sp) // Recover ft1
+ flw f2, 33*4(sp) // Recover ft2
+ flw f3, 34*4(sp) // Recover ft3
+ flw f4, 35*4(sp) // Recover ft4
+ flw f5, 36*4(sp) // Recover ft5
+ flw f6, 37*4(sp) // Recover ft6
+ flw f7, 38*4(sp) // Recover ft7
+ flw f10, 41*4(sp) // Recover fa0
+ flw f11, 42*4(sp) // Recover fa1
+ flw f12, 43*4(sp) // Recover fa2
+ flw f13, 44*4(sp) // Recover fa3
+ flw f14, 45*4(sp) // Recover fa4
+ flw f15, 46*4(sp) // Recover fa5
+ flw f16, 47*4(sp) // Recover fa6
+ flw f17, 48*4(sp) // Recover fa7
+ flw f28, 59*4(sp) // Recover ft8
+ flw f29, 60*4(sp) // Recover ft9
+ flw f30, 61*4(sp) // Recover ft10
+ flw f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#elif defined(__riscv_float_abi_double)
+ fld f0, 31*4(sp) // Recover ft0
+ fld f1, 32*4(sp) // Recover ft1
+ fld f2, 33*4(sp) // Recover ft2
+ fld f3, 34*4(sp) // Recover ft3
+ fld f4, 35*4(sp) // Recover ft4
+ fld f5, 36*4(sp) // Recover ft5
+ fld f6, 37*4(sp) // Recover ft6
+ fld f7, 38*4(sp) // Recover ft7
+ fld f10, 41*4(sp) // Recover fa0
+ fld f11, 42*4(sp) // Recover fa1
+ fld f12, 43*4(sp) // Recover fa2
+ fld f13, 44*4(sp) // Recover fa3
+ fld f14, 45*4(sp) // Recover fa4
+ fld f15, 46*4(sp) // Recover fa5
+ fld f16, 47*4(sp) // Recover fa6
+ fld f17, 48*4(sp) // Recover fa7
+ fld f28, 59*4(sp) // Recover ft8
+ fld f29, 60*4(sp) // Recover ft9
+ fld f30, 61*4(sp) // Recover ft10
+ fld f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#endif
+
+ /* Recover the saved context and return to the point of interrupt. */
+
+ /* Recover standard registers. */
+ /* Restore registers,
+ Skip global pointer because that does not change */
+
+ lw t0, 30*4(sp) // Recover mepc
+ csrw mepc, t0 // Setup mepc
+
+ /* Compose mstatus via read/modify/write to avoid clobbering unrelated bits. */
+
+ csrr t1, mstatus
+ li t2, 0x1888 // MPP(0x1800) | MPIE(0x80) | MIE(0x08)
+ li t3, 0x1800 // Set MPP to Machine mode
+ li t4, ~0x1888 // Clear mask for MPP/MPIE/MIE
+ and t1, t1, t4
+ or t1, t1, t3
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ li t0, 0x2000 // Set FS bits for FP state
+ or t1, t1, t0
+#endif
+ csrw mstatus, t1 // Update mstatus safely
+
+ lw ra, 28*4(sp) // Recover return address
+ lw t0, 19*4(sp) // Recover t0
+ lw t1, 18*4(sp) // Recover t1
+ lw t2, 17*4(sp) // Recover t2
+ lw s0, 12*4(sp) // Recover s0
+ lw a0, 27*4(sp) // Recover a0
+ lw a1, 26*4(sp) // Recover a1
+ lw a2, 25*4(sp) // Recover a2
+ lw a3, 24*4(sp) // Recover a3
+ lw a4, 23*4(sp) // Recover a4
+ lw a5, 22*4(sp) // Recover a5
+ lw a6, 21*4(sp) // Recover a6
+ lw a7, 20*4(sp) // Recover a7
+ lw t3, 16*4(sp) // Recover t3
+ lw t4, 15*4(sp) // Recover t4
+ lw t5, 14*4(sp) // Recover t5
+ lw t6, 13*4(sp) // Recover t6
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, 65*4 // Recover stack frame - with floating point enabled
+#else
+ addi sp, sp, 32*4 // Recover stack frame - without floating point enabled
+#endif
+ mret // Return to point of interrupt
+
+ /* }
+ else
+ { */
+_tx_thread_preempt_restore:
+ /* Instead of directly activating the thread again, ensure we save the
+ entire stack frame by saving the remaining registers. */
+
+ lw t0, 8(t1) // Pickup thread's stack pointer
+ ori t3, zero, 1 // Build interrupt stack type
+ sw t3, 0(t0) // Store stack type
+
+ /* Store floating point preserved registers. */
+#ifdef __riscv_float_abi_single
+ fsw f8, 39*4(t0) // Store fs0
+ fsw f9, 40*4(t0) // Store fs1
+ fsw f18, 49*4(t0) // Store fs2
+ fsw f19, 50*4(t0) // Store fs3
+ fsw f20, 51*4(t0) // Store fs4
+ fsw f21, 52*4(t0) // Store fs5
+ fsw f22, 53*4(t0) // Store fs6
+ fsw f23, 54*4(t0) // Store fs7
+ fsw f24, 55*4(t0) // Store fs8
+ fsw f25, 56*4(t0) // Store fs9
+ fsw f26, 57*4(t0) // Store fs10
+ fsw f27, 58*4(t0) // Store fs11
+#elif defined(__riscv_float_abi_double)
+ fsd f8, 39*4(t0) // Store fs0
+ fsd f9, 40*4(t0) // Store fs1
+ fsd f18, 49*4(t0) // Store fs2
+ fsd f19, 50*4(t0) // Store fs3
+ fsd f20, 51*4(t0) // Store fs4
+ fsd f21, 52*4(t0) // Store fs5
+ fsd f22, 53*4(t0) // Store fs6
+ fsd f23, 54*4(t0) // Store fs7
+ fsd f24, 55*4(t0) // Store fs8
+ fsd f25, 56*4(t0) // Store fs9
+ fsd f26, 57*4(t0) // Store fs10
+ fsd f27, 58*4(t0) // Store fs11
+#endif
+
+ /* Store standard preserved registers. */
+
+ sw x9, 11*4(t0) // Store s1
+ sw x18, 10*4(t0) // Store s2
+ sw x19, 9*4(t0) // Store s3
+ sw x20, 8*4(t0) // Store s4
+ sw x21, 7*4(t0) // Store s5
+ sw x22, 6*4(t0) // Store s6
+ sw x23, 5*4(t0) // Store s7
+ sw x24, 4*4(t0) // Store s8
+ sw x25, 3*4(t0) // Store s9
+ sw x26, 2*4(t0) // Store s10
+ sw x27, 1*4(t0) // Store s11
+ // Note: s0 is already stored!
+
+ /* Save the remaining time-slice and disable it. */
+ /* if (_tx_timer_time_slice)
+ { */
+
+ la t0, _tx_timer_time_slice // Pickup time slice variable address
+ lw t2, 0(t0) // Pickup time slice
+ beqz t2, _tx_thread_dont_save_ts // If 0, skip time slice processing
+
+ /* _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice
+ _tx_timer_time_slice = 0; */
+
+ sw t2, 24(t1) // Save current time slice
+ sw x0, 0(t0) // Clear global time slice
+
+
+ /* } */
+_tx_thread_dont_save_ts:
+ /* Clear the current task pointer. */
+ /* _tx_thread_current_ptr = TX_NULL; */
+
+ /* Return to the scheduler. */
+ /* _tx_thread_schedule(); */
+
+ la t0, _tx_thread_current_ptr // Pickup current thread pointer address
+ sw x0, 0(t0) // Clear current thread pointer
+
+ /* } */
+
+_tx_thread_idle_system_restore:
+ /* Just return back to the scheduler! */
+ j _tx_thread_schedule // Return to scheduler
+
+/* } */
diff --git a/ports/risc-v32/clang/src/tx_thread_context_save.S b/ports/risc-v32/clang/src/tx_thread_context_save.S
new file mode 100644
index 000000000..ffb302e36
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_context_save.S
@@ -0,0 +1,271 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_context_save RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function saves the context of an executing thread in the */
+/* beginning of interrupt processing. The function also ensures that */
+/* the system stack is used upon return to the calling ISR. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* ISRs */
+/* */
+/**************************************************************************/
+/* VOID _tx_thread_context_save(VOID)
+{ */
+ .global _tx_thread_context_save
+_tx_thread_context_save:
+
+ /* Upon entry to this routine, RA/x1 has been saved on the stack
+ and the stack has been already allocated for the entire context:
+ addi sp, sp, -32*4 (or -65*4)
+ sw ra, 28*4(sp)
+ */
+
+ sw t0, 19*4(sp) // Store t0
+ sw t1, 18*4(sp) // Store t1
+
+ /* Check for a nested interrupt. */
+ /* if (_tx_thread_system_state++)
+ { */
+
+ la t0, _tx_thread_system_state // Pickup addr of system state var
+ lw t1, 0(t0) // Pickup system state
+ addi t1, t1, 1 // Increment system state
+ sw t1, 0(t0) // Store system state
+ li t0, 1
+ bgt t1, t0, _tx_thread_nested_save // If it's more than 1, nested interrupt
+
+ /* First level interrupt, save the rest of the scratch registers and
+ check for a thread to preempt. */
+
+ sw t2, 17*4(sp) // Store t2
+ sw s0, 12*4(sp) // Store s0
+ sw a0, 27*4(sp) // Store a0
+ sw a1, 26*4(sp) // Store a1
+ sw a2, 25*4(sp) // Store a2
+ sw a3, 24*4(sp) // Store a3
+ sw a4, 23*4(sp) // Store a4
+ sw a5, 22*4(sp) // Store a5
+ sw a6, 21*4(sp) // Store a6
+ sw a7, 20*4(sp) // Store a7
+ sw t3, 16*4(sp) // Store t3
+ sw t4, 15*4(sp) // Store t4
+ sw t5, 14*4(sp) // Store t5
+ sw t6, 13*4(sp) // Store t6
+
+ /* Save floating point registers. */
+#if defined(__riscv_float_abi_single)
+ fsw f0, 31*4(sp) // Store ft0
+ fsw f1, 32*4(sp) // Store ft1
+ fsw f2, 33*4(sp) // Store ft2
+ fsw f3, 34*4(sp) // Store ft3
+ fsw f4, 35*4(sp) // Store ft4
+ fsw f5, 36*4(sp) // Store ft5
+ fsw f6, 37*4(sp) // Store ft6
+ fsw f7, 38*4(sp) // Store ft7
+ fsw f10, 41*4(sp) // Store fa0
+ fsw f11, 42*4(sp) // Store fa1
+ fsw f12, 43*4(sp) // Store fa2
+ fsw f13, 44*4(sp) // Store fa3
+ fsw f14, 45*4(sp) // Store fa4
+ fsw f15, 46*4(sp) // Store fa5
+ fsw f16, 47*4(sp) // Store fa6
+ fsw f17, 48*4(sp) // Store fa7
+ fsw f28, 59*4(sp) // Store ft8
+ fsw f29, 60*4(sp) // Store ft9
+ fsw f30, 61*4(sp) // Store ft10
+ fsw f31, 62*4(sp) // Store ft11
+ csrr t0, fcsr
+ sw t0, 63*4(sp) // Store fcsr
+#elif defined(__riscv_float_abi_double)
+ fsd f0, 31*4(sp) // Store ft0
+ fsd f1, 32*4(sp) // Store ft1
+ fsd f2, 33*4(sp) // Store ft2
+ fsd f3, 34*4(sp) // Store ft3
+ fsd f4, 35*4(sp) // Store ft4
+ fsd f5, 36*4(sp) // Store ft5
+ fsd f6, 37*4(sp) // Store ft6
+ fsd f7, 38*4(sp) // Store ft7
+ fsd f10, 41*4(sp) // Store fa0
+ fsd f11, 42*4(sp) // Store fa1
+ fsd f12, 43*4(sp) // Store fa2
+ fsd f13, 44*4(sp) // Store fa3
+ fsd f14, 45*4(sp) // Store fa4
+ fsd f15, 46*4(sp) // Store fa5
+ fsd f16, 47*4(sp) // Store fa6
+ fsd f17, 48*4(sp) // Store fa7
+ fsd f28, 59*4(sp) // Store ft8
+ fsd f29, 60*4(sp) // Store ft9
+ fsd f30, 61*4(sp) // Store ft10
+ fsd f31, 62*4(sp) // Store ft11
+ csrr t0, fcsr
+ sw t0, 63*4(sp) // Store fcsr
+#endif
+
+ csrr t0, mepc
+ sw t0, 30*4(sp) // Save it on the stack
+
+ /* Save mstatus. */
+ csrr t0, mstatus
+ sw t0, 29*4(sp)
+
+ la t1, _tx_thread_current_ptr // Pickup address of current thread ptr
+ lw t2, 0(t1) // Pickup current thread pointer
+ beqz t2, _tx_thread_idle_system_save // If NULL, idle system was interrupted
+
+ /* Save the current thread's stack pointer and switch to the system stack. */
+ /* _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+ sp = _tx_thread_system_stack_ptr; */
+
+ sw sp, 8(t2) // Save stack pointer
+ la t0, _tx_thread_system_stack_ptr
+ lw sp, 0(t0) // Switch to system stack
+
+ /* Call the ISR execution exit function if enabled. */
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ call _tx_execution_isr_enter // Call the ISR execution enter function
+#endif
+
+ ret // Return to ISR
+
+_tx_thread_nested_save:
+
+ /* Nested interrupt! Just save the scratch registers and return to the ISR. */
+
+ sw t2, 17*4(sp) // Store t2
+ sw s0, 12*4(sp) // Store s0
+ sw a0, 27*4(sp) // Store a0
+ sw a1, 26*4(sp) // Store a1
+ sw a2, 25*4(sp) // Store a2
+ sw a3, 24*4(sp) // Store a3
+ sw a4, 23*4(sp) // Store a4
+ sw a5, 22*4(sp) // Store a5
+ sw a6, 21*4(sp) // Store a6
+ sw a7, 20*4(sp) // Store a7
+ sw t3, 16*4(sp) // Store t3
+ sw t4, 15*4(sp) // Store t4
+ sw t5, 14*4(sp) // Store t5
+ sw t6, 13*4(sp) // Store t6
+
+ /* Save floating point registers. */
+#if defined(__riscv_float_abi_single)
+ fsw f0, 31*4(sp) // Store ft0
+ fsw f1, 32*4(sp) // Store ft1
+ fsw f2, 33*4(sp) // Store ft2
+ fsw f3, 34*4(sp) // Store ft3
+ fsw f4, 35*4(sp) // Store ft4
+ fsw f5, 36*4(sp) // Store ft5
+ fsw f6, 37*4(sp) // Store ft6
+ fsw f7, 38*4(sp) // Store ft7
+ fsw f10, 41*4(sp) // Store fa0
+ fsw f11, 42*4(sp) // Store fa1
+ fsw f12, 43*4(sp) // Store fa2
+ fsw f13, 44*4(sp) // Store fa3
+ fsw f14, 45*4(sp) // Store fa4
+ fsw f15, 46*4(sp) // Store fa5
+ fsw f16, 47*4(sp) // Store fa6
+ fsw f17, 48*4(sp) // Store fa7
+ fsw f28, 59*4(sp) // Store ft8
+ fsw f29, 60*4(sp) // Store ft9
+ fsw f30, 61*4(sp) // Store ft10
+ fsw f31, 62*4(sp) // Store ft11
+ csrr t0, fcsr
+ sw t0, 63*4(sp) // Store fcsr
+#elif defined(__riscv_float_abi_double)
+ fsd f0, 31*4(sp) // Store ft0
+ fsd f1, 32*4(sp) // Store ft1
+ fsd f2, 33*4(sp) // Store ft2
+ fsd f3, 34*4(sp) // Store ft3
+ fsd f4, 35*4(sp) // Store ft4
+ fsd f5, 36*4(sp) // Store ft5
+ fsd f6, 37*4(sp) // Store ft6
+ fsd f7, 38*4(sp) // Store ft7
+ fsd f10, 41*4(sp) // Store fa0
+ fsd f11, 42*4(sp) // Store fa1
+ fsd f12, 43*4(sp) // Store fa2
+ fsd f13, 44*4(sp) // Store fa3
+ fsd f14, 45*4(sp) // Store fa4
+ fsd f15, 46*4(sp) // Store fa5
+ fsd f16, 47*4(sp) // Store fa6
+ fsd f17, 48*4(sp) // Store fa7
+ fsd f28, 59*4(sp) // Store ft8
+ fsd f29, 60*4(sp) // Store ft9
+ fsd f30, 61*4(sp) // Store ft10
+ fsd f31, 62*4(sp) // Store ft11
+ csrr t0, fcsr
+ sw t0, 63*4(sp) // Store fcsr
+#endif
+
+ csrr t0, mepc
+ sw t0, 30*4(sp) // Save it on stack
+
+ csrr t0, mstatus
+ sw t0, 29*4(sp)
+
+ /* Call the ISR execution exit function if enabled. */
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ call _tx_execution_isr_enter // Call the ISR execution enter function
+#endif
+
+ ret // Return to ISR
+
+_tx_thread_idle_system_save:
+
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ call _tx_execution_isr_enter // Call the ISR execution enter function
+#endif
+
+ /* Interrupt occurred in the scheduling loop. */
+
+ /* }
+} */
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, 65*4 // Recover stack frame - with floating point enabled
+#else
+ addi sp, sp, 32*4 // Recover the reserved stack space
+#endif
+ ret // Return to calling ISR
diff --git a/ports/risc-v32/clang/src/tx_thread_interrupt_control.S b/ports/risc-v32/clang/src/tx_thread_interrupt_control.S
new file mode 100644
index 000000000..86b6745e2
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_interrupt_control.S
@@ -0,0 +1,88 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_interrupt_control RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is responsible for changing the interrupt lockout */
+/* posture of the system. */
+/* */
+/* INPUT */
+/* */
+/* new_posture New interrupt lockout posture */
+/* */
+/* OUTPUT */
+/* */
+/* old_posture Old interrupt lockout posture */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* Application Code */
+/* */
+/**************************************************************************/
+/* UINT _tx_thread_interrupt_control(UINT new_posture)
+{ */
+ .global _tx_thread_interrupt_control
+_tx_thread_interrupt_control:
+
+ /* Pickup current interrupt posture. */
+
+ csrr a1, mstatus // Pickup mstatus
+ andi a1, a1, 0x08 // Mask out all but MIE
+
+ /* Check for the new posture. */
+
+ beqz a0, _tx_thread_interrupt_disable // If 0, disable interrupts
+
+ /* Enable interrupts. */
+
+ csrsi mstatus, 0x08 // Enable interrupts (MIE bit 3)
+ j _tx_thread_interrupt_control_exit // Return to caller
+
+_tx_thread_interrupt_disable:
+
+ /* Disable interrupts. */
+
+ csrci mstatus, 0x08 // Disable interrupts (MIE bit 3)
+
+_tx_thread_interrupt_control_exit:
+
+ /* Return the old interrupt posture. */
+
+ mv a0, a1 // Setup return value
+ ret // Return to caller
+
+/* } */
diff --git a/ports/risc-v32/clang/src/tx_thread_schedule.S b/ports/risc-v32/clang/src/tx_thread_schedule.S
new file mode 100644
index 000000000..d5a54fa26
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_schedule.S
@@ -0,0 +1,318 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_schedule RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function waits for a thread control block pointer to appear in */
+/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+/* in the variable, the corresponding thread is resumed. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* _tx_thread_system_return Return to system from thread */
+/* _tx_thread_context_restore Restore thread's context */
+/* */
+/**************************************************************************/
+/* VOID _tx_thread_schedule(VOID)
+{ */
+ .global _tx_thread_schedule
+_tx_thread_schedule:
+
+ /* Enable interrupts. */
+
+ csrsi mstatus, 0x08 // Enable interrupts (MIE bit 3)
+
+ /* Wait for a thread to execute. */
+ /* do
+ { */
+_tx_thread_schedule_loop:
+
+ la t0, _tx_thread_execute_ptr // Pickup address of execute ptr
+ lw t1, 0(t0) // Pickup execute pointer
+ bnez t1, _tx_thread_ready_to_run // If non-NULL, a thread is ready to run
+
+#ifndef TX_NO_WFI
+ wfi // Wait for interrupt
+#endif
+ j _tx_thread_schedule_loop // Check again
+
+ /* }
+ while (_tx_thread_execute_ptr == TX_NULL); */
+
+_tx_thread_ready_to_run:
+
+ /* At this point, t1 contains the pointer to the thread to execute.
+ Lockout interrupts. */
+
+ csrci mstatus, 0x08 // Disable interrupts (MIE bit 3)
+
+ /* Check _tx_thread_execute_ptr again, in case an interrupt occurred
+ between the check and the disable. */
+
+ lw t1, 0(t0) // Pickup execute pointer
+ beqz t1, _tx_thread_schedule_loop // If NULL, go back to wait loop
+
+ /* Yes! We have a thread to execute. */
+ /* _tx_thread_current_ptr = _tx_thread_execute_ptr; */
+
+ la t0, _tx_thread_current_ptr // Pickup address of current thread
+ sw t1, 0(t0) // Setup current thread pointer
+
+ /* Increment the run count for this thread. */
+ /* _tx_thread_current_ptr -> tx_thread_run_count++; */
+
+ lw t2, 4(t1) // Pickup run count
+ addi t2, t2, 1 // Increment run count
+ sw t2, 4(t1) // Store run count
+
+ /* Setup time-slice values. */
+ /* _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice; */
+
+ lw t2, 24(t1) // Pickup thread time-slice
+ la t3, _tx_timer_time_slice // Pickup address of time-slice
+ sw t2, 0(t3) // Setup time-slice
+
+ /* Call the thread execution enter function if enabled. */
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+
+ call _tx_execution_thread_enter // Call the thread execution enter function
+#endif
+
+ /* Switch to the thread's stack. */
+ /* sp = _tx_thread_current_ptr -> tx_thread_stack_ptr; */
+
+ lw sp, 8(t1) // Switch to thread stack
+
+ /* Determine the type of stack frame. */
+ /* if (*sp)
+ { */
+
+ lw t0, 0(sp) // Pickup stack type
+ beqz t0, _tx_thread_solicited_return // If 0, solicited return
+
+ /* Recover floating point registers. */
+#if defined(__riscv_float_abi_single)
+ flw f0, 31*4(sp) // Recover ft0
+ flw f1, 32*4(sp) // Recover ft1
+ flw f2, 33*4(sp) // Recover ft2
+ flw f3, 34*4(sp) // Recover ft3
+ flw f4, 35*4(sp) // Recover ft4
+ flw f5, 36*4(sp) // Recover ft5
+ flw f6, 37*4(sp) // Recover ft6
+ flw f7, 38*4(sp) // Recover ft7
+ flw f8, 39*4(sp) // Recover fs0
+ flw f9, 40*4(sp) // Recover fs1
+ flw f10, 41*4(sp) // Recover fa0
+ flw f11, 42*4(sp) // Recover fa1
+ flw f12, 43*4(sp) // Recover fa2
+ flw f13, 44*4(sp) // Recover fa3
+ flw f14, 45*4(sp) // Recover fa4
+ flw f15, 46*4(sp) // Recover fa5
+ flw f16, 47*4(sp) // Recover fa6
+ flw f17, 48*4(sp) // Recover fa7
+ flw f18, 49*4(sp) // Recover fs2
+ flw f19, 50*4(sp) // Recover fs3
+ flw f20, 51*4(sp) // Recover fs4
+ flw f21, 52*4(sp) // Recover fs5
+ flw f22, 53*4(sp) // Recover fs6
+ flw f23, 54*4(sp) // Recover fs7
+ flw f24, 55*4(sp) // Recover fs8
+ flw f25, 56*4(sp) // Recover fs9
+ flw f26, 57*4(sp) // Recover fs10
+ flw f27, 58*4(sp) // Recover fs11
+ flw f28, 59*4(sp) // Recover ft8
+ flw f29, 60*4(sp) // Recover ft9
+ flw f30, 61*4(sp) // Recover ft10
+ flw f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#elif defined(__riscv_float_abi_double)
+ fld f0, 31*4(sp) // Recover ft0
+ fld f1, 32*4(sp) // Recover ft1
+ fld f2, 33*4(sp) // Recover ft2
+ fld f3, 34*4(sp) // Recover ft3
+ fld f4, 35*4(sp) // Recover ft4
+ fld f5, 36*4(sp) // Recover ft5
+ fld f6, 37*4(sp) // Recover ft6
+ fld f7, 38*4(sp) // Recover ft7
+ fld f8, 39*4(sp) // Recover fs0
+ fld f9, 40*4(sp) // Recover fs1
+ fld f10, 41*4(sp) // Recover fa0
+ fld f11, 42*4(sp) // Recover fa1
+ fld f12, 43*4(sp) // Recover fa2
+ fld f13, 44*4(sp) // Recover fa3
+ fld f14, 45*4(sp) // Recover fa4
+ fld f15, 46*4(sp) // Recover fa5
+ fld f16, 47*4(sp) // Recover fa6
+ fld f17, 48*4(sp) // Recover fa7
+ fld f18, 49*4(sp) // Recover fs2
+ fld f19, 50*4(sp) // Recover fs3
+ fld f20, 51*4(sp) // Recover fs4
+ fld f21, 52*4(sp) // Recover fs5
+ fld f22, 53*4(sp) // Recover fs6
+ fld f23, 54*4(sp) // Recover fs7
+ fld f24, 55*4(sp) // Recover fs8
+ fld f25, 56*4(sp) // Recover fs9
+ fld f26, 57*4(sp) // Recover fs10
+ fld f27, 58*4(sp) // Recover fs11
+ fld f28, 59*4(sp) // Recover ft8
+ fld f29, 60*4(sp) // Recover ft9
+ fld f30, 61*4(sp) // Recover ft10
+ fld f31, 62*4(sp) // Recover ft11
+ lw t0, 63*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#endif
+
+ /* Recover standard registers. */
+
+ lw t0, 30*4(sp) // Recover mepc
+ csrw mepc, t0 // Setup mepc
+
+ li t0, 0x1880 // Prepare mstatus: MPP=Machine(0x1800) | MPIE(0x80)
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ li t1, 0x2000 // Set FS bits for FP state
+ or t0, t0, t1
+#endif
+ csrw mstatus, t0 // Set mstatus
+
+ lw ra, 28*4(sp) // Recover return address
+ lw t0, 19*4(sp) // Recover t0
+ lw t1, 18*4(sp) // Recover t1
+ lw t2, 17*4(sp) // Recover t2
+ lw s0, 12*4(sp) // Recover s0
+ lw x9, 11*4(sp) // Recover s1
+ lw a0, 27*4(sp) // Recover a0
+ lw a1, 26*4(sp) // Recover a1
+ lw a2, 25*4(sp) // Recover a2
+ lw a3, 24*4(sp) // Recover a3
+ lw a4, 23*4(sp) // Recover a4
+ lw a5, 22*4(sp) // Recover a5
+ lw a6, 21*4(sp) // Recover a6
+ lw a7, 20*4(sp) // Recover a7
+ lw t3, 16*4(sp) // Recover t3
+ lw t4, 15*4(sp) // Recover t4
+ lw t5, 14*4(sp) // Recover t5
+ lw t6, 13*4(sp) // Recover t6
+ lw x18, 10*4(sp) // Recover s2
+ lw x19, 9*4(sp) // Recover s3
+ lw x20, 8*4(sp) // Recover s4
+ lw x21, 7*4(sp) // Recover s5
+ lw x22, 6*4(sp) // Recover s6
+ lw x23, 5*4(sp) // Recover s7
+ lw x24, 4*4(sp) // Recover s8
+ lw x25, 3*4(sp) // Recover s9
+ lw x26, 2*4(sp) // Recover s10
+ lw x27, 1*4(sp) // Recover s11
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, 65*4 // Recover stack frame - with floating point enabled
+#else
+ addi sp, sp, 32*4 // Recover stack frame - without floating point enabled
+#endif
+ mret // Return to thread
+
+_tx_thread_solicited_return:
+
+ /* Recover floating point registers. */
+#if defined(__riscv_float_abi_single)
+ flw f8, 15*4(sp) // Recover fs0
+ flw f9, 16*4(sp) // Recover fs1
+ flw f18, 17*4(sp) // Recover fs2
+ flw f19, 18*4(sp) // Recover fs3
+ flw f20, 19*4(sp) // Recover fs4
+ flw f21, 20*4(sp) // Recover fs5
+ flw f22, 21*4(sp) // Recover fs6
+ flw f23, 22*4(sp) // Recover fs7
+ flw f24, 23*4(sp) // Recover fs8
+ flw f25, 24*4(sp) // Recover fs9
+ flw f26, 25*4(sp) // Recover fs10
+ flw f27, 26*4(sp) // Recover fs11
+ lw t0, 27*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#elif defined(__riscv_float_abi_double)
+ fld f8, 15*4(sp) // Recover fs0
+ fld f9, 16*4(sp) // Recover fs1
+ fld f18, 17*4(sp) // Recover fs2
+ fld f19, 18*4(sp) // Recover fs3
+ fld f20, 19*4(sp) // Recover fs4
+ fld f21, 20*4(sp) // Recover fs5
+ fld f22, 21*4(sp) // Recover fs6
+ fld f23, 22*4(sp) // Recover fs7
+ fld f24, 23*4(sp) // Recover fs8
+ fld f25, 24*4(sp) // Recover fs9
+ fld f26, 25*4(sp) // Recover fs10
+ fld f27, 26*4(sp) // Recover fs11
+ lw t0, 27*4(sp) // Recover fcsr
+ csrw fcsr, t0 // Restore fcsr
+#endif
+
+ /* Recover standard registers. */
+
+ lw t0, 14*4(sp) // Recover mstatus
+ csrw mstatus, t0 // Restore mstatus
+
+ lw ra, 13*4(sp) // Recover return address
+ lw s0, 12*4(sp) // Recover s0
+ lw s1, 11*4(sp) // Recover s1
+ lw x18, 10*4(sp) // Recover s2
+ lw x19, 9*4(sp) // Recover s3
+ lw x20, 8*4(sp) // Recover s4
+ lw x21, 7*4(sp) // Recover s5
+ lw x22, 6*4(sp) // Recover s6
+ lw x23, 5*4(sp) // Recover s7
+ lw x24, 4*4(sp) // Recover s8
+ lw x25, 3*4(sp) // Recover s9
+ lw x26, 2*4(sp) // Recover s10
+ lw x27, 1*4(sp) // Recover s11
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, 29*4 // Recover stack frame - with floating point enabled
+#else
+ addi sp, sp, 16*4 // Recover stack frame - without floating point enabled
+#endif
+ ret // Return to thread
+
+/* } */
diff --git a/ports/risc-v32/clang/src/tx_thread_stack_build.S b/ports/risc-v32/clang/src/tx_thread_stack_build.S
new file mode 100644
index 000000000..2b8ebae11
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_stack_build.S
@@ -0,0 +1,221 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_stack_build RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function builds a stack frame on the supplied thread's stack. */
+/* The stack frame results in a fake interrupt return to the supplied */
+/* function pointer. */
+/* */
+/* INPUT */
+/* */
+/* thread_ptr Pointer to thread control blk */
+/* function_ptr Pointer to return function */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_thread_create Create thread service */
+/* */
+/**************************************************************************/
+/* VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
+{ */
+ .global _tx_thread_stack_build
+_tx_thread_stack_build:
+
+ /* Build a fake interrupt frame. The form of the fake interrupt stack
+ on the RISC-V should look like the following after it is built:
+ Reg Index
+ Stack Top: 1 0 Interrupt stack frame type
+ x27 1 Initial s11
+ x26 2 Initial s10
+ x25 3 Initial s9
+ x24 4 Initial s8
+ x23 5 Initial s7
+ x22 6 Initial s6
+ x21 7 Initial s5
+ x20 8 Initial s4
+ x19 9 Initial s3
+ x18 10 Initial s2
+ x9 11 Initial s1
+ x8 12 Initial s0
+ x31 13 Initial t6
+ x30 14 Initial t5
+ x29 15 Initial t4
+ x28 16 Initial t3
+ x7 17 Initial t2
+ x6 18 Initial t1
+ x5 19 Initial t0
+ x17 20 Initial a7
+ x16 21 Initial a6
+ x15 22 Initial a5
+ x14 23 Initial a4
+ x13 24 Initial a3
+ x12 25 Initial a2
+ x11 26 Initial a1
+ x10 27 Initial a0
+ x1 28 Initial ra
+ -- 29 reserved
+ mepc 30 Initial mepc
+If floating point support:
+ f0 31 Initial ft0
+ f1 32 Initial ft1
+ f2 33 Initial ft2
+ f3 34 Initial ft3
+ f4 35 Initial ft4
+ f5 36 Initial ft5
+ f6 37 Initial ft6
+ f7 38 Initial ft7
+ f8 39 Initial fs0
+ f9 40 Initial fs1
+ f10 41 Initial fa0
+ f11 42 Initial fa1
+ f12 43 Initial fa2
+ f13 44 Initial fa3
+ f14 45 Initial fa4
+ f15 46 Initial fa5
+ f16 47 Initial fa6
+ f17 48 Initial fa7
+ f18 49 Initial fs2
+ f19 50 Initial fs3
+ f20 51 Initial fs4
+ f21 52 Initial fs5
+ f22 53 Initial fs6
+ f23 54 Initial fs7
+ f24 55 Initial fs8
+ f25 56 Initial fs9
+ f26 57 Initial fs10
+ f27 58 Initial fs11
+ f28 59 Initial ft8
+ f29 60 Initial ft9
+ f30 61 Initial ft10
+ f31 62 Initial ft11
+ fscr 63 Initial fscr
+
+ Stack Bottom: (higher memory address) */
+
+ lw t0, 16(a0) // Pickup end of stack area
+ li t1, ~15 // Build 16-byte alignment mask
+ and t0, t0, t1 // Make sure 16-byte alignment
+
+ /* Actually build the stack frame. */
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi t0, t0, -65*4
+#else
+ addi t0, t0, -32*4 // Allocate space for the stack frame
+#endif
+ li t1, 1 // Build stack type
+ sw t1, 0*4(t0) // Place stack type on the top
+ sw zero, 1*4(t0) // Initial s11
+ sw zero, 2*4(t0) // Initial s10
+ sw zero, 3*4(t0) // Initial s9
+ sw zero, 4*4(t0) // Initial s8
+ sw zero, 5*4(t0) // Initial s7
+ sw zero, 6*4(t0) // Initial s6
+ sw zero, 7*4(t0) // Initial s5
+ sw zero, 8*4(t0) // Initial s4
+ sw zero, 9*4(t0) // Initial s3
+ sw zero, 10*4(t0) // Initial s2
+ sw zero, 11*4(t0) // Initial s1
+ sw zero, 12*4(t0) // Initial s0
+ sw zero, 13*4(t0) // Initial t6
+ sw zero, 14*4(t0) // Initial t5
+ sw zero, 15*4(t0) // Initial t4
+ sw zero, 16*4(t0) // Initial t3
+ sw zero, 17*4(t0) // Initial t2
+ sw zero, 18*4(t0) // Initial t1
+ sw zero, 19*4(t0) // Initial t0
+ sw zero, 20*4(t0) // Initial a7
+ sw zero, 21*4(t0) // Initial a6
+ sw zero, 22*4(t0) // Initial a5
+ sw zero, 23*4(t0) // Initial a4
+ sw zero, 24*4(t0) // Initial a3
+ sw zero, 25*4(t0) // Initial a2
+ sw zero, 26*4(t0) // Initial a1
+ sw zero, 27*4(t0) // Initial a0
+ sw zero, 28*4(t0) // Initial ra
+ sw a1, 30*4(t0) // Initial mepc (thread entry point)
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ sw zero, 31*4(t0) // Initial ft0
+ sw zero, 32*4(t0) // Initial ft1
+ sw zero, 33*4(t0) // Initial ft2
+ sw zero, 34*4(t0) // Initial ft3
+ sw zero, 35*4(t0) // Initial ft4
+ sw zero, 36*4(t0) // Initial ft5
+ sw zero, 37*4(t0) // Initial ft6
+ sw zero, 38*4(t0) // Initial ft7
+ sw zero, 39*4(t0) // Initial fs0
+ sw zero, 40*4(t0) // Initial fs1
+ sw zero, 41*4(t0) // Initial fa0
+ sw zero, 42*4(t0) // Initial fa1
+ sw zero, 43*4(t0) // Initial fa2
+ sw zero, 44*4(t0) // Initial fa3
+ sw zero, 45*4(t0) // Initial fa4
+ sw zero, 46*4(t0) // Initial fa5
+ sw zero, 47*4(t0) // Initial fa6
+ sw zero, 48*4(t0) // Initial fa7
+ sw zero, 49*4(t0) // Initial fs2
+ sw zero, 50*4(t0) // Initial fs3
+ sw zero, 51*4(t0) // Initial fs4
+ sw zero, 52*4(t0) // Initial fs5
+ sw zero, 53*4(t0) // Initial fs6
+ sw zero, 54*4(t0) // Initial fs7
+ sw zero, 55*4(t0) // Initial fs8
+ sw zero, 56*4(t0) // Initial fs9
+ sw zero, 57*4(t0) // Initial fs10
+ sw zero, 58*4(t0) // Initial fs11
+ sw zero, 59*4(t0) // Initial ft8
+ sw zero, 60*4(t0) // Initial ft9
+ sw zero, 61*4(t0) // Initial ft10
+ sw zero, 62*4(t0) // Initial ft11
+ csrr a1, fcsr // Read fcsr for initial value
+ sw a1, 63*4(t0) // Initial fcsr
+ sw zero, 64*4(t0) // Reserved word (0)
+#else
+ sw zero, 31*4(t0) // Reserved word (0)
+#endif
+
+ /* Setup stack pointer. */
+ /* thread_ptr -> tx_thread_stack_ptr = t0; */
+
+ sw t0, 8(a0) // Save stack pointer in thread's
+ ret // control block and return
+/* } */
diff --git a/ports/risc-v32/clang/src/tx_thread_system_return.S b/ports/risc-v32/clang/src/tx_thread_system_return.S
new file mode 100644
index 000000000..b54f54fa8
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_thread_system_return.S
@@ -0,0 +1,168 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Thread */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_thread_system_return RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is target processor specific. It is used to transfer */
+/* control from a thread back to the system. Only a minimal context */
+/* is saved since the compiler assumes temp registers are going to get */
+/* slicked by a function call anyway. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_thread_schedule Thread scheduling loop */
+/* */
+/* CALLED BY */
+/* */
+/* ThreadX components */
+/* */
+/**************************************************************************/
+/* VOID _tx_thread_system_return(VOID)
+{ */
+ .global _tx_thread_system_return
+_tx_thread_system_return:
+
+ /* Save minimal context on the stack. */
+ /* sp -= sizeof(stack_frame); */
+
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, -29*4 // Allocate space on the stack - with floating point enabled
+#else
+ addi sp, sp, -16*4 // Allocate space on the stack - without floating point enabled
+#endif
+
+ /* Store floating point preserved registers. */
+#if defined(__riscv_float_abi_single)
+ fsw f8, 15*4(sp) // Store fs0
+ fsw f9, 16*4(sp) // Store fs1
+ fsw f18, 17*4(sp) // Store fs2
+ fsw f19, 18*4(sp) // Store fs3
+ fsw f20, 19*4(sp) // Store fs4
+ fsw f21, 20*4(sp) // Store fs5
+ fsw f22, 21*4(sp) // Store fs6
+ fsw f23, 22*4(sp) // Store fs7
+ fsw f24, 23*4(sp) // Store fs8
+ fsw f25, 24*4(sp) // Store fs9
+ fsw f26, 25*4(sp) // Store fs10
+ fsw f27, 26*4(sp) // Store fs11
+ csrr t0, fcsr
+ sw t0, 27*4(sp) // Store fcsr
+#elif defined(__riscv_float_abi_double)
+ fsd f8, 15*4(sp) // Store fs0
+ fsd f9, 16*4(sp) // Store fs1
+ fsd f18, 17*4(sp) // Store fs2
+ fsd f19, 18*4(sp) // Store fs3
+ fsd f20, 19*4(sp) // Store fs4
+ fsd f21, 20*4(sp) // Store fs5
+ fsd f22, 21*4(sp) // Store fs6
+ fsd f23, 22*4(sp) // Store fs7
+ fsd f24, 23*4(sp) // Store fs8
+ fsd f25, 24*4(sp) // Store fs9
+ fsd f26, 25*4(sp) // Store fs10
+ fsd f27, 26*4(sp) // Store fs11
+ csrr t0, fcsr
+ sw t0, 27*4(sp) // Store fcsr
+#endif
+
+ sw zero, 0(sp) // Solicited stack type
+ sw ra, 13*4(sp) // Save return address
+ sw s0, 12*4(sp) // Save s0
+ sw s1, 11*4(sp) // Save s1
+ sw s2, 10*4(sp) // Save s2
+ sw s3, 9*4(sp) // Save s3
+ sw s4, 8*4(sp) // Save s4
+ sw s5, 7*4(sp) // Save s5
+ sw s6, 6*4(sp) // Save s6
+ sw s7, 5*4(sp) // Save s7
+ sw s8, 4*4(sp) // Save s8
+ sw s9, 3*4(sp) // Save s9
+ sw s10, 2*4(sp) // Save s10
+ sw s11, 1*4(sp) // Save s11
+ csrr t0, mstatus // Pickup mstatus
+ sw t0, 14*4(sp) // Save mstatus
+
+
+ /* Lockout interrupts. will be enabled in _tx_thread_schedule */
+
+ csrci mstatus, 0x08 // Disable interrupts (MIE bit 3)
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+
+ call _tx_execution_thread_exit // Call the thread execution exit function
+#endif
+
+ la t0, _tx_thread_current_ptr // Pickup address of pointer
+ lw t1, 0(t0) // Pickup current thread pointer
+ la t2, _tx_thread_system_stack_ptr // Pickup stack pointer address
+
+ /* Save current stack and switch to system stack. */
+ /* _tx_thread_current_ptr -> tx_thread_stack_ptr = SP;
+ SP = _tx_thread_system_stack_ptr; */
+
+ sw sp, 8(t1) // Save stack pointer
+ lw sp, 0(t2) // Switch to system stack
+
+ /* Determine if the time-slice is active. */
+ /* if (_tx_timer_time_slice)
+ { */
+
+ la t4, _tx_timer_time_slice // Pickup time slice variable addr
+ lw t3, 0(t4) // Pickup time slice value
+ la t2, _tx_thread_schedule // Pickup address of scheduling loop
+ beqz t3, _tx_thread_dont_save_ts // If no time-slice, don't save it
+
+ /* Save time-slice for the thread and clear the current time-slice. */
+ /* _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+ _tx_timer_time_slice = 0; */
+
+ sw t3, 24(t1) // Save current time-slice for thread
+ sw zero, 0(t4) // Clear time-slice variable
+
+ /* } */
+_tx_thread_dont_save_ts:
+
+ /* Clear the current thread pointer. */
+ /* _tx_thread_current_ptr = TX_NULL; */
+
+ sw x0, 0(t0) // Clear current thread pointer
+ jr t2 // Return to thread scheduler
+
+/* } */
diff --git a/ports/risc-v32/clang/src/tx_timer_interrupt.S b/ports/risc-v32/clang/src/tx_timer_interrupt.S
new file mode 100644
index 000000000..b64bf06b4
--- /dev/null
+++ b/ports/risc-v32/clang/src/tx_timer_interrupt.S
@@ -0,0 +1,204 @@
+/***************************************************************************
+ * Copyright (c) 2026 Quintauris
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Timer */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+ .section .text
+ .align 4
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_timer_interrupt RISC-V32/GNU */
+/* 6.2.1 */
+/* AUTHOR */
+/* */
+/* Francisco Merino, Quintauris */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function processes the hardware timer interrupt. This */
+/* processing includes incrementing the system clock and checking for */
+/* time slice and/or timer expiration. If either is found, the */
+/* interrupt context save/restore functions are called along with the */
+/* expiration functions. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* _tx_timer_expiration_process Timer expiration processing */
+/* _tx_thread_time_slice Time slice interrupted thread */
+/* */
+/* CALLED BY */
+/* */
+/* interrupt vector */
+/* */
+/**************************************************************************/
+/* VOID _tx_timer_interrupt(VOID)
+{ */
+ .global _tx_timer_interrupt
+_tx_timer_interrupt:
+
+ /* Increment the system clock. */
+ /* _tx_timer_system_clock++; */
+
+ la t0, _tx_timer_system_clock // Pickup address of system clock
+ lw t1, 0(t0) // Pickup system clock
+ la t2, _tx_timer_time_slice // Pickup address of time slice
+ lw t3, 0(t2) // Pickup time slice
+ addi t1, t1, 1 // Increment system clock
+ sw t1, 0(t0) // Store new system clock
+ li t6, 0 // Clear local expired flag
+
+ /* Test for time-slice expiration. */
+ /* if (_tx_timer_time_slice)
+ { */
+
+ beqz t3, _tx_timer_no_time_slice // If 0, skip time slice processing
+ addi t3, t3, -1 // Decrement the time slice
+
+ /* Decrement the time_slice. */
+ /* _tx_timer_time_slice--; */
+
+ sw t3, 0(t2) // Store new time slice
+
+ /* Check for expiration. */
+ /* if (_tx_timer_time_slice == 0) */
+
+ bgtz t3, _tx_timer_no_time_slice // If not 0, has not expired yet
+ li t1, 1 // Build expired flag
+
+ /* Set the time-slice expired flag. */
+ /* _tx_timer_expired_time_slice = TX_TRUE; */
+
+ la t4, _tx_timer_expired_time_slice // Get address of expired flag
+ sw t1, 0(t4) // Set expired flag (UINT)
+ ori t6, t6, 1 // Set local expired flag
+
+ /* } */
+
+_tx_timer_no_time_slice:
+
+ /* Test for timer expiration. */
+ /* if (*_tx_timer_current_ptr)
+ { */
+
+ la t0, _tx_timer_current_ptr // Pickup address of current ptr
+ lw t1, 0(t0) // Pickup current pointer (word)
+ lw t3, 0(t1) // Pickup the current timer entry (word)
+ la t2, _tx_timer_expired // Pickup address of timer expired flag
+ li t4, 1 // Build TX_TRUE flag
+ beqz t3, _tx_timer_no_timer // If NULL, no timer has expired
+
+ /* Set expiration flag. */
+ /* _tx_timer_expired = TX_TRUE; */
+
+ ori t6, t6, 2 // Set local expired flag
+ sw t4, 0(t2) // Set expired flag in memory (UINT)
+ j _tx_timer_done // Finished timer processing
+
+
+ /* }
+ else
+ { */
+_tx_timer_no_timer:
+
+ /* No timer expired, increment the timer pointer. */
+ /* _tx_timer_current_ptr++; */
+
+ /* Check for wrap-around. */
+ /* if (_tx_timer_current_ptr == _tx_timer_list_end) */
+
+ la t2, _tx_timer_list_end // Pickup address of list end pointer
+ lw t3, 0(t2) // Pickup actual list end
+ addi t1, t1, 4 // Point to next timer entry
+ sw t1, 0(t0) // Store new timer pointer
+ bne t1, t3, _tx_timer_skip_wrap // If not same, good pointer
+
+ /* Wrap to beginning of list. */
+ /* _tx_timer_current_ptr = _tx_timer_list_start; */
+
+ la t2, _tx_timer_list_start // Pickup address of list start pointer
+ lw t4, 0(t2) // Pickup start of the list
+ sw t4, 0(t0) // Store new timer pointer
+
+
+_tx_timer_skip_wrap:
+ /* } */
+
+_tx_timer_done:
+
+
+ /* See if anything has expired. */
+ /* if ((_tx_timer_expired_time_slice) || (_tx_timer_expired))
+ { */
+
+ beqz t6, _tx_timer_nothing_expired // If nothing expired skip the rest
+ addi sp, sp, -16 // Allocate some storage on the stack
+ sw t6, 0(sp) // Save local expired flag
+ sw ra, 4(sp) // Save ra
+
+ /* Did a timer expire? */
+ /* if (_tx_timer_expired)
+ { */
+
+ andi t2, t6, 2 // Isolate the timer expired bit
+ beqz t2, _tx_timer_dont_activate // No, timer not expired
+
+ /* Call the timer expiration processing. */
+ /* _tx_timer_expiration_process(void); */
+
+ call _tx_timer_expiration_process // Call _tx_timer_expiration_process
+ lw t6, 0(sp) // Recover local expired flag
+
+ /* } */
+_tx_timer_dont_activate:
+
+ /* Did time slice expire? */
+ /* if (_tx_timer_expired_time_slice)
+ { */
+
+ andi t2, t6, 1 // Is the timer expired bit set?
+ beqz t2, _tx_timer_not_ts_expiration // If not, skip time slice processing
+
+ /* Time slice interrupted thread. */
+ /* _tx_thread_time_slice(); */
+
+ call _tx_thread_time_slice // Call time slice
+
+ /* } */
+
+_tx_timer_not_ts_expiration:
+
+ lw ra, 4(sp) // Recover ra
+ addi sp, sp, 16 // Recover stack space
+ /* } */
+
+_tx_timer_nothing_expired:
+
+ ret
+
+/* } */
\ No newline at end of file
diff --git a/ports/risc-v32/gnu/CMakeLists.txt b/ports/risc-v32/gnu/CMakeLists.txt
new file mode 100644
index 000000000..9357c6970
--- /dev/null
+++ b/ports/risc-v32/gnu/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+target_sources(${PROJECT_NAME}
+ PRIVATE
+ # {{BEGIN_TARGET_SOURCES}}
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_initialize_low_level.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_restore.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_context_save.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_interrupt_control.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_schedule.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_stack_build.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_thread_system_return.S
+ ${CMAKE_CURRENT_LIST_DIR}/src/tx_timer_interrupt.S
+ # {{END_TARGET_SOURCES}}
+)
+
+target_include_directories(${PROJECT_NAME}
+ PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/inc
+)
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/board.c b/ports/risc-v32/gnu/example_build/qemu_virt/board.c
new file mode 100644
index 000000000..fc75de668
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/board.c
@@ -0,0 +1,42 @@
+/***************************************************************************
+ * Copyright (c) 2025 10xEngineers
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "plic.h"
+#include "hwtimer.h"
+#include "uart.h"
+#include
+#include
+
+void *memset(const void *des, int c,size_t n)
+{
+ if((des == NULL) || n <=0)
+ return (void*)des;
+ char* t = (char*)des;
+ int i;
+ for(i=0;i
+
+static inline uint32_t riscv_get_core()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mhartid" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_mstatus()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mstatus" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mstatus(uint32_t x)
+{
+ asm volatile("csrw mstatus, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_mepc(uint32_t x)
+{
+ asm volatile("csrw mepc, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sstatus()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sstatus" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sstatus(uint32_t x)
+{
+ asm volatile("csrw sstatus, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sip()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sip" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sip(uint32_t x)
+{
+ asm volatile("csrw sip, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sie()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sie" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_sie(uint32_t x)
+{
+ asm volatile("csrw sie, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mie()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mie" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mie(uint32_t x)
+{
+ asm volatile("csrw mie, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_sepc(uint32_t x)
+{
+ asm volatile("csrw sepc, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_sepc()
+{
+ uint32_t x;
+ asm volatile("csrr %0, sepc" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_medeleg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, medeleg" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_medeleg(uint32_t x)
+{
+ asm volatile("csrw medeleg, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mideleg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mideleg" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mideleg(uint32_t x)
+{
+ asm volatile("csrw mideleg, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_stvec(uint32_t x)
+{
+ asm volatile("csrw stvec, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_stvec()
+{
+ uint32_t x;
+ asm volatile("csrr %0, stvec" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_stimecmp()
+{
+ uint32_t x;
+ asm volatile("csrr %0, 0x14d" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_stimecmp(uint32_t x)
+{
+ asm volatile("csrw 0x14d, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_menvcfg()
+{
+ uint32_t x;
+ asm volatile("csrr %0, 0x30a" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_menvcfg(uint32_t x)
+{
+ asm volatile("csrw 0x30a, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_pmpcfg0(uint32_t x)
+{
+ asm volatile("csrw pmpcfg0, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_pmpaddr0(uint32_t x)
+{
+ asm volatile("csrw pmpaddr0, %0" : : "r" (x));
+}
+
+static inline void riscv_writ_satp(uint32_t x)
+{
+ asm volatile("csrw satp, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_satp()
+{
+ uint32_t x;
+ asm volatile("csrr %0, satp" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_scause()
+{
+ uint32_t x;
+ asm volatile("csrr %0, scause" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_stval()
+{
+ uint32_t x;
+ asm volatile("csrr %0, stval" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_mcounteren(uint32_t x)
+{
+ asm volatile("csrw mcounteren, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_mcounteren()
+{
+ uint32_t x;
+ asm volatile("csrr %0, mcounteren" : "=r" (x) );
+ return x;
+}
+
+static inline uint32_t riscv_get_time()
+{
+ uint32_t x;
+ asm volatile("csrr %0, time" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_sintr_on()
+{
+ uint32_t sstatus = riscv_get_sstatus();
+ sstatus |= SSTATUS_SIE;
+ riscv_writ_sstatus(sstatus);
+}
+
+static inline void riscv_sintr_off()
+{
+ uint32_t sstatus = riscv_get_sstatus();
+ sstatus &= (~SSTATUS_SIE);
+ riscv_writ_sstatus(sstatus);
+}
+
+static inline int riscv_sintr_get()
+{
+ uint32_t x = riscv_get_sstatus();
+ return (x & SSTATUS_SIE) != 0;
+}
+
+static inline void riscv_sintr_restore(int x)
+{
+ if(x)
+ riscv_sintr_on();
+ else
+ riscv_sintr_off();
+}
+
+static inline void riscv_mintr_on()
+{
+ uint32_t mstatus = riscv_get_mstatus();
+ mstatus |= MSTATUS_MIE;
+ riscv_writ_mstatus(mstatus);
+}
+
+static inline void riscv_mintr_off()
+{
+ uint32_t mstatus = riscv_get_mstatus();
+ mstatus &= (~MSTATUS_MIE);
+ riscv_writ_mstatus(mstatus);
+}
+
+static inline int riscv_mintr_get()
+{
+ uint32_t x = riscv_get_mstatus();
+ return (x & MSTATUS_MIE) != 0;
+}
+
+static inline void riscv_mintr_restore(int x)
+{
+ if(x)
+ riscv_mintr_on();
+ else
+ riscv_mintr_off();
+}
+
+static inline uint32_t riscv_get_sp()
+{
+ uint32_t x;
+ asm volatile("mv %0, sp" : "=r" (x) );
+ return x;
+}
+
+// read and write tp, the thread pointer, which xv6 uses to hold
+// this core's hartid (core number), the index into cpus[].
+static inline uint32_t riscv_get_tp()
+{
+ uint32_t x;
+ asm volatile("mv %0, tp" : "=r" (x) );
+ return x;
+}
+
+static inline void riscv_writ_tp(uint32_t x)
+{
+ asm volatile("mv tp, %0" : : "r" (x));
+}
+
+static inline uint32_t riscv_get_ra()
+{
+ uint32_t x;
+ asm volatile("mv %0, ra" : "=r" (x) );
+ return x;
+}
+
+// flush the TLB.
+static inline void sfence_vma()
+{
+ // the zero, zero means flush all TLB entries.
+ asm volatile("sfence.vma zero, zero");
+}
+
+#endif // __ASSEMBLER__
+
+#endif
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/demo_threadx.c b/ports/risc-v32/gnu/example_build/qemu_virt/demo_threadx.c
new file mode 100644
index 000000000..f21dbb26b
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/demo_threadx.c
@@ -0,0 +1,393 @@
+/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ byte pool, and block pool. */
+
+#include "tx_api.h"
+#include "uart.h"
+
+#define DEMO_STACK_SIZE 1024
+#define DEMO_BYTE_POOL_SIZE 9120
+#define DEMO_BLOCK_POOL_SIZE 100
+#define DEMO_QUEUE_SIZE 100
+
+char *_to_str(ULONG val)
+{
+ static char buf[11]; /* 10 digits max + '\0' */
+ char *p = buf + sizeof(buf) - 1;
+
+ *p = '\0';
+ do {
+ *--p = '0' + (val % 10);
+ val /= 10;
+ } while (val);
+
+ return p;
+}
+
+/* Define the ThreadX object control blocks... */
+
+TX_THREAD thread_0;
+TX_THREAD thread_1;
+TX_THREAD thread_2;
+TX_THREAD thread_3;
+TX_THREAD thread_4;
+TX_THREAD thread_5;
+TX_THREAD thread_6;
+TX_THREAD thread_7;
+TX_QUEUE queue_0;
+TX_SEMAPHORE semaphore_0;
+TX_MUTEX mutex_0;
+TX_EVENT_FLAGS_GROUP event_flags_0;
+TX_BYTE_POOL byte_pool_0;
+TX_BLOCK_POOL block_pool_0;
+
+
+/* Define the counters used in the demo application... */
+
+ULONG thread_0_counter;
+ULONG thread_1_counter;
+ULONG thread_1_messages_sent;
+ULONG thread_2_counter;
+ULONG thread_2_messages_received;
+ULONG thread_3_counter;
+ULONG thread_4_counter;
+ULONG thread_5_counter;
+ULONG thread_6_counter;
+ULONG thread_7_counter;
+
+
+/* Define thread prototypes. */
+
+void thread_0_entry(ULONG thread_input);
+void thread_1_entry(ULONG thread_input);
+void thread_2_entry(ULONG thread_input);
+void thread_3_and_4_entry(ULONG thread_input);
+void thread_5_entry(ULONG thread_input);
+void thread_6_and_7_entry(ULONG thread_input);
+
+
+/* Define main entry point. */
+
+int main()
+{
+
+ /* Enter the ThreadX kernel. */
+ tx_kernel_enter();
+}
+
+
+/* Define what the initial system looks like. */
+
+void tx_application_define(void *first_unused_memory)
+{
+ CHAR *pointer = TX_NULL;
+
+ /* Create a byte memory pool from which to allocate the thread stacks. */
+ tx_byte_pool_create(&byte_pool_0, "byte pool 0", first_unused_memory, DEMO_BYTE_POOL_SIZE);
+
+ /* Put system definition stuff in here, e.g. thread creates and other assorted
+ create information. */
+
+ /* Allocate the stack for thread 0. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create the main thread. */
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+
+ /* Allocate the stack for thread 1. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
+ message queue. It is also interesting to note that these threads have a time
+ slice. */
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 2. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 3. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ An interesting thing here is that both threads share the same instruction area. */
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 4. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 5. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create thread 5. This thread simply pends on an event flag which will be set
+ by thread_0. */
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
+ 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 6. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 7. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the message queue. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
+
+ /* Create the message queue shared by threads 1 and 2. */
+ tx_queue_create(&queue_0, "queue 0", TX_1_ULONG, pointer, DEMO_QUEUE_SIZE*sizeof(ULONG));
+
+ /* Create the semaphore used by threads 3 and 4. */
+ tx_semaphore_create(&semaphore_0, "semaphore 0", 1);
+
+ /* Create the event flags group used by threads 1 and 5. */
+ tx_event_flags_create(&event_flags_0, "event flags 0");
+
+ /* Create the mutex used by thread 6 and 7 without priority inheritance. */
+ tx_mutex_create(&mutex_0, "mutex 0", TX_NO_INHERIT);
+
+ /* Allocate the memory for a small block pool. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_BLOCK_POOL_SIZE, TX_NO_WAIT);
+
+ /* Create a block memory pool to allocate a message buffer from. */
+ tx_block_pool_create(&block_pool_0, "block pool 0", sizeof(ULONG), pointer, DEMO_BLOCK_POOL_SIZE);
+
+ /* Allocate a block and release the block memory. */
+ tx_block_allocate(&block_pool_0, (VOID **) &pointer, TX_NO_WAIT);
+
+ /* Release the block back to the pool. */
+ tx_block_release(pointer);
+}
+
+
+
+/* Define the test threads. */
+
+void thread_0_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sits in while-forever-sleep loop. */
+ while(1)
+ {
+ puts("[Thread] : thread_0_entry is here!");
+
+ /* Increment the thread counter. */
+ thread_0_counter++;
+
+ /* Sleep for 10 ticks. */
+ tx_thread_sleep(10);
+
+ /* Set event flag 0 to wakeup thread 5. */
+ status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_1_entry(ULONG thread_input)
+{
+
+UINT status;
+
+ /* This thread simply sends messages to a queue shared by thread 2. */
+ while(1)
+ {
+ puts("[Thread] : thread_1_entry is here!");
+ /* Increment the thread counter. */
+ thread_1_counter++;
+
+ /* Send message to queue 0. */
+ status = tx_queue_send(&queue_0, &thread_1_messages_sent, TX_WAIT_FOREVER);
+
+ /* Check completion status. */
+ if (status != TX_SUCCESS) {
+ puts("[Thread 1] ERROR: Failed to send message!");
+ break;
+ }
+
+ /* Increment the message sent. */
+ thread_1_messages_sent++;
+ }
+}
+
+
+
+void thread_2_entry(ULONG thread_input)
+{
+
+ULONG received_message;
+UINT status;
+
+ /* This thread retrieves messages placed on the queue by thread 1. */
+ while(1)
+ {
+ puts("[Thread] : thread_2_entry is here!");
+ /* Increment the thread counter. */
+ thread_2_counter++;
+
+ /* Retrieve a message from the queue. */
+ status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
+
+ /* Check completion status and make sure the message is what we
+ expected. */
+ if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received)){
+ puts("[Thread 2] ERROR: Failed to receive message ! Expected # ");
+ uart_puts(_to_str(thread_2_messages_received));
+ puts(", but got # ");
+ uart_puts(_to_str(received_message));
+ break;
+ }
+
+ /* Otherwise, all is okay. Increment the received message count. */
+ thread_2_messages_received++;
+ }
+}
+
+
+void thread_3_and_4_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 3 and thread 4. As the loop
+ below shows, these function compete for ownership of semaphore_0. */
+ while(1)
+ {
+ puts("[Thread] : thread_3_and_4_entry is here!");
+
+
+ /* Increment the thread counter. */
+ if (thread_input == 3)
+ thread_3_counter++;
+ else
+ thread_4_counter++;
+
+ /* Get the semaphore with suspension. */
+ status = tx_semaphore_get(&semaphore_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the semaphore. */
+ tx_thread_sleep(2);
+
+ /* Release the semaphore. */
+ status = tx_semaphore_put(&semaphore_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_5_entry(ULONG thread_input)
+{
+
+UINT status;
+ULONG actual_flags;
+
+
+ /* This thread simply waits for an event in a forever loop. */
+ while(1)
+ {
+ puts("[Thread] : thread_5_entry is here!");
+
+ /* Increment the thread counter. */
+ thread_5_counter++;
+
+ /* Wait for event flag 0. */
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ &actual_flags, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if ((status != TX_SUCCESS) || (actual_flags != 0x1))
+ break;
+ }
+}
+
+
+void thread_6_and_7_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 6 and thread 7. As the loop
+ below shows, these function compete for ownership of mutex_0. */
+ while(1)
+ {
+ puts("[Thread] : thread_6_and_7_entry is here!");
+
+ /* Increment the thread counter. */
+ if (thread_input == 6)
+ thread_6_counter++;
+ else
+ thread_7_counter++;
+
+ /* Get the mutex with suspension. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Get the mutex again with suspension. This shows
+ that an owning thread may retrieve the mutex it
+ owns multiple times. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the mutex. */
+ tx_thread_sleep(2);
+
+ /* Release the mutex. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Release the mutex again. This will actually
+ release ownership since it was obtained twice. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/entry.s b/ports/risc-v32/gnu/example_build/qemu_virt/entry.s
new file mode 100644
index 000000000..9b202ca16
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/entry.s
@@ -0,0 +1,58 @@
+
+.section .text
+.align 4
+.global _start
+.extern main
+.extern _sysstack_start
+.extern _bss_start
+.extern _bss_end
+_start:
+ csrr t0, mhartid
+ bne t0, zero, 1f
+ li x1, 0
+ li x2, 0
+ li x3, 0
+ li x4, 0
+ li x5, 0
+ li x6, 0
+ li x7, 0
+ li x8, 0
+ li x9, 0
+ li x10, 0
+ li x11, 0
+ li x12, 0
+ li x13, 0
+ li x14, 0
+ li x15, 0
+ li x16, 0
+ li x17, 0
+ li x18, 0
+ li x19, 0
+ li x20, 0
+ li x21, 0
+ li x22, 0
+ li x23, 0
+ li x24, 0
+ li x25, 0
+ li x26, 0
+ li x27, 0
+ li x28, 0
+ li x29, 0
+ li x30, 0
+ li x31, 0
+ la t0, _sysstack_start
+ li t1, 0x1000
+ add sp, t0, t1
+ la t0, _bss_start
+ la t1, _bss_end
+_bss_clean_start:
+ bgeu t0, t1, _bss_clean_end
+ sb zero, 0(t0)
+ addi t0, t0, 1
+ j _bss_clean_start
+_bss_clean_end:
+ call main
+1:
+ /* todo smp */
+ wfi
+ j 1b
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.c b/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.c
new file mode 100644
index 000000000..33c49b638
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.c
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * Copyright (c) 2025 10xEngineers
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "tx_port.h"
+#include "csr.h"
+#include "hwtimer.h"
+
+#define CLINT (0x02000000L)
+#define CLINT_TIME (CLINT+0xBFF8)
+#define CLINT_TIMECMP(hart_id) (CLINT+0x4000+8*(hart_id))
+
+
+int hwtimer_init(void)
+{
+ int hart = riscv_get_core();
+ uint64_t time = *((uint64_t*)CLINT_TIME);
+ *((uint64_t*)CLINT_TIMECMP(hart)) = time + TICKNUM_PER_TIMER;
+ return 0;
+}
+
+int hwtimer_handler(void)
+{
+ int hart = riscv_get_core();
+ uint64_t time = *((uint64_t*)CLINT_TIME);
+ *((uint64_t*)CLINT_TIMECMP(hart)) = time + TICKNUM_PER_TIMER;
+ return 0;
+}
+
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.h b/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.h
new file mode 100644
index 000000000..966b1abfb
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/hwtimer.h
@@ -0,0 +1,23 @@
+
+/***************************************************************************
+ * Copyright (c) 2025 10xEngineers
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#ifndef RISCV_HWTIMER_H
+#define RISCV_HWTIMER_H
+
+#include
+
+#define TICKNUM_PER_SECOND 10000000
+#define TICKNUM_PER_TIMER (TICKNUM_PER_SECOND / 10)
+
+int hwtimer_init(void);
+int hwtimer_handler(void);
+
+#endif
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/link.lds b/ports/risc-v32/gnu/example_build/qemu_virt/link.lds
new file mode 100644
index 000000000..522f90d96
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/link.lds
@@ -0,0 +1,49 @@
+OUTPUT_ARCH( "riscv" )
+ENTRY( _start )
+
+SECTIONS
+{
+ /*
+ * ensure that entry.S / _entry is at 0x80000000,
+ * where qemu's -kernel jumps.
+ */
+ . = 0x80000000;
+
+ .text : {
+ *(.text .text.*)
+ . = ALIGN(0x1000);
+ PROVIDE(etext = .);
+ }
+
+ .rodata : {
+ . = ALIGN(16);
+ *(.srodata .srodata.*) /* do not need to distinguish this from .rodata */
+ . = ALIGN(16);
+ *(.rodata .rodata.*)
+ }
+
+ .data : {
+ . = ALIGN(16);
+ *(.sdata .sdata.*) /* do not need to distinguish this from .data */
+ . = ALIGN(16);
+ *(.data .data.*)
+ }
+
+ .bss : {
+ . = ALIGN(16);
+ _bss_start = .;
+ *(.sbss .sbss.*) /* do not need to distinguish this from .bss */
+ . = ALIGN(16);
+ *(.bss .bss.*)
+ _bss_end = .;
+ }
+
+ .stack : {
+ . = ALIGN(4096);
+ _sysstack_start = .;
+ . += 0x1000;
+ _sysstack_end = .;
+ }
+
+ PROVIDE(_end = .);
+}
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/plic.c b/ports/risc-v32/gnu/example_build/qemu_virt/plic.c
new file mode 100644
index 000000000..01e5c71a4
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/plic.c
@@ -0,0 +1,72 @@
+#include "plic.h"
+#include
+irq_callback callbacks[MAX_CALLBACK_NUM];
+
+void plic_irq_enable(int irqno)
+{
+ int hart = riscv_get_core();
+ *(uint32_t*)PLIC_MENABLE(hart) = (*(uint32_t*)PLIC_MENABLE(hart) | (1 << irqno));
+ return;
+}
+
+void plic_irq_disable(int irqno)
+{
+ int hart = riscv_get_core();
+ *(uint32_t*)PLIC_MENABLE(hart) = (*(uint32_t*)PLIC_MENABLE(hart) & (~(1 << irqno)));
+ return;
+}
+
+void plic_prio_set(int irqno, int prio)
+{
+ PLIC_SET_PRIO(irqno, prio);
+}
+
+int plic_prio_get(int irqno)
+{
+ return PLIC_GET_PRIO(irqno);
+}
+
+int plic_register_callback(int irqno, irq_callback callback)
+{
+ if(!(irqno >=0 && irqno < MAX_CALLBACK_NUM))
+ return -1;
+ callbacks[irqno] = callback;
+ return 0;
+}
+
+int plic_unregister_callback(int irqno)
+{
+ return plic_register_callback(irqno, NULL);
+}
+
+int plic_init(void)
+{
+ for(int i=0;i
+
+#define PLIC 0x0c000000L
+#define PLIC_PRIORITY (PLIC + 0x0)
+#define PLIC_PENDING (PLIC + 0x1000)
+#define PLIC_MENABLE(hart) (PLIC + 0x2000 + (hart)*0x100)
+#define PLIC_SENABLE(hart) (PLIC + 0x2080 + (hart)*0x100)
+#define PLIC_MPRIORITY(hart) (PLIC + 0x200000 + (hart)*0x2000)
+#define PLIC_SPRIORITY(hart) (PLIC + 0x201000 + (hart)*0x2000)
+#define PLIC_MCLAIM(hart) (PLIC + 0x200004 + (hart)*0x2000)
+#define PLIC_SCLAIM(hart) (PLIC + 0x201004 + (hart)*0x2000)
+#define PLIC_MCOMPLETE(hart) (PLIC + 0x200004 + (hart)*0x2000)
+#define PLIC_SCOMPLETE(hart) (PLIC + 0x201004 + (hart)*0x2000)
+
+
+#define PLIC_GET_PRIO(irqno) (*(uint32_t *)(PLIC_PRIORITY + (irqno)*4))
+#define PLIC_SET_PRIO(irqno, prio) (*(uint32_t *)(PLIC_PRIORITY + (irqno)*4) = (prio))
+
+#define MAX_CALLBACK_NUM 128
+typedef int (*irq_callback)(int irqno);
+
+void plic_irq_enable(int irqno);
+void plic_irq_disable(int irqno);
+int plic_prio_get(int irqno);
+void plic_prio_set(int irqno, int prio);
+int plic_register_callback(int irqno, irq_callback callback);
+int plic_unregister_callback(int irqno);
+int plic_init(void);
+int plic_claim(void);
+void plic_complete(int irqno);
+
+int plic_irq_intr(void);
+
+#endif
+
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/trap.c b/ports/risc-v32/gnu/example_build/qemu_virt/trap.c
new file mode 100644
index 000000000..a2733e02a
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/trap.c
@@ -0,0 +1,67 @@
+#include "csr.h"
+#include
+#include "uart.h"
+#include "hwtimer.h"
+#include "plic.h"
+#include
+#include
+
+#define OS_IS_INTERUPT(mcause) (mcause & 0x80000000u)
+#define OS_IS_EXCEPTION(mcause) (~(OS_IS_INTERUPT))
+#define OS_IS_TICK_INT(mcause) (mcause == 0x80000007u)
+#define OS_IS_SOFT_INT(mcause) (mcause == 0x80000003u)
+#define OS_IS_EXT_INT(mcause) (mcause == 0x8000000bu)
+#define OS_IS_TRAP_USER(mcause) (mcause == 0x0000000bu)
+extern void _tx_timer_interrupt(void);
+
+extern int uart_putc(int ch);
+
+static void print_hex(uintptr_t val)
+{
+ char digits[] = "0123456789ABCDEF";
+ uart_putc('0');
+ uart_putc('x');
+ for(int i = (sizeof(uintptr_t)*2) - 1; i >= 0; i--) {
+ int d = (val >> (i*4)) & 0xF;
+ uart_putc(digits[d]);
+ }
+ uart_putc('\n');
+}
+
+void trap_handler(uintptr_t mcause, uintptr_t mepc, uintptr_t mtval)
+{
+ // uart_puts("DEBUG : threadx/ports/risc-v32/gnu/example_build/qemu_virt/trap.c, trap_handler\n");
+ if(OS_IS_INTERUPT(mcause))
+ {
+ if(OS_IS_TICK_INT(mcause))
+ {
+ hwtimer_handler();
+ _tx_timer_interrupt();
+ }
+ else if(OS_IS_EXT_INT(mcause))
+ {
+ int ret = plic_irq_intr();
+ if(ret)
+ {
+ puts("[INTERRUPT]: handler irq error!");
+ while(1) ;
+ }
+ }
+ else
+ {
+ puts("[INTERRUPT]: now can't deal with the interrupt!");
+ while(1) ;
+ }
+ }
+ else
+ {
+ puts("[EXCEPTION] : Unkown Error!!");
+ puts("mcause:");
+ print_hex(mcause);
+ puts("mepc:");
+ print_hex(mepc);
+ puts("mtval:");
+ print_hex(mtval);
+ while(1) ;
+ }
+}
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/tx_initialize_low_level.S b/ports/risc-v32/gnu/example_build/qemu_virt/tx_initialize_low_level.S
new file mode 100644
index 000000000..9a7a74ffd
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/tx_initialize_low_level.S
@@ -0,0 +1,162 @@
+/***************************************************************************
+ * Copyright (c) 2025 10xEngineers
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#include "csr.h"
+
+ .section .text
+ .align 4
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* trap_entry RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Akif Ejaz, 10xEngineers */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is responsible for riscv processor trap handle */
+/* It will do the contex save and call c trap_handler and do contex */
+/* load */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* trap_handler */
+/* */
+/* CALLED BY */
+/* */
+/* hardware exception */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Initialize */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+ .global trap_entry
+ .extern trap_handler
+ .extern _tx_thread_context_restore
+ trap_entry:
+#if defined(__riscv_float_abi_single) || defined(__riscv_float_abi_double)
+ addi sp, sp, -260 // Allocate space for all registers - with floating point enabled (65*4)
+#else
+ addi sp, sp, -128 // Allocate space for all registers - without floating point enabled (32*4)
+#endif
+
+ sw x1, 112(sp) // Store RA (28*4 = 112, because call will override ra [ra is a callee register in riscv])
+
+ call _tx_thread_context_save
+
+ csrr a0, mcause
+ csrr a1, mepc
+ csrr a2, mtval
+ addi sp, sp, -4
+ sw ra, 0(sp)
+ call trap_handler
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ call _tx_thread_context_restore
+ // it will nerver return
+_err:
+ wfi
+ j _err
+ .section .text
+/**************************************************************************/
+/* */
+/* FUNCTION RELEASE */
+/* */
+/* _tx_initialize_low_level RISC-V32/GNU */
+/* 6.4.x */
+/* AUTHOR */
+/* */
+/* Akif Ejaz, 10xEngineers */
+/* */
+/* DESCRIPTION */
+/* */
+/* This function is responsible for any low-level processor */
+/* initialization, including setting up interrupt vectors, setting */
+/* up a periodic timer interrupt source, saving the system stack */
+/* pointer for use in ISR processing later, and finding the first */
+/* available RAM memory address for tx_application_define. */
+/* */
+/* INPUT */
+/* */
+/* None */
+/* */
+/* OUTPUT */
+/* */
+/* None */
+/* */
+/* CALLS */
+/* */
+/* None */
+/* */
+/* CALLED BY */
+/* */
+/* _tx_initialize_kernel_enter ThreadX entry function */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 12-29-2025 Akif Ejaz Adapted for RV32 from RV64 port */
+/* */
+/**************************************************************************/
+/* VOID _tx_initialize_low_level(VOID)
+{ */
+ .global _tx_initialize_low_level
+ .weak _tx_initialize_low_level
+ .extern _end
+ .extern board_init
+_tx_initialize_low_level:
+
+ .section .text
+
+ la t0, _tx_thread_system_stack_ptr
+ sw sp, 0(t0) // Save system stack pointer
+
+ la t0, _end // Pickup first free address
+ la t1, _tx_initialize_unused_memory
+ sw t0, 0(t1) // Save unused memory address
+ li t0, MSTATUS_MIE
+ csrrc zero, mstatus, t0 // clear MSTATUS_MIE bit
+ li t0, (MSTATUS_MPP_M | MSTATUS_MPIE )
+ csrrs zero, mstatus, t0 // set MSTATUS_MPP, MPIE bit
+ li t0, (MIE_MTIE | MIE_MSIE | MIE_MEIE)
+ csrrs zero, mie, t0 // set mie
+#ifdef __riscv_flen
+ li t0, MSTATUS_FS
+ csrrs zero, mstatus, t0 // set MSTATUS_FS bit to open f/d isa in riscv
+ fscsr x0
+#endif
+ addi sp, sp, -4
+ sw ra, 0(sp)
+ call board_init
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ la t0, trap_entry
+ csrw mtvec, t0
+ ret
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/uart.c b/ports/risc-v32/gnu/example_build/qemu_virt/uart.c
new file mode 100644
index 000000000..a175b7d25
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/uart.c
@@ -0,0 +1,102 @@
+#include "uart.h"
+#include "csr.h"
+#include "plic.h"
+#include
+
+// the UART control registers are memory-mapped
+// at address UART0. this macro returns the
+// address of one of the registers.
+#define Reg(reg) ((volatile unsigned char *)(UART0 + (reg)))
+
+// the UART control registers.
+// some have different meanings for
+// read vs write.
+// see http://byterunner.com/16550.html
+#define RHR 0 // receive holding register (for input bytes)
+#define THR 0 // transmit holding register (for output bytes)
+#define IER 1 // interrupt enable register
+#define IER_RX_ENABLE (1<<0)
+#define IER_TX_ENABLE (1<<1)
+#define FCR 2 // FIFO control register
+#define FCR_FIFO_ENABLE (1<<0)
+#define FCR_FIFO_CLEAR (3<<1) // clear the content of the two FIFOs
+#define ISR 2 // interrupt status register
+#define LCR 3 // line control register
+#define LCR_EIGHT_BITS (3<<0)
+#define LCR_BAUD_LATCH (1<<7) // special mode to set baud rate
+#define LSR 5 // line status register
+#define LSR_RX_READY (1<<0) // input is waiting to be read from RHR
+#define LSR_TX_IDLE (1<<5) // THR can accept another character to send
+
+#define ReadReg(reg) (*(Reg(reg)))
+#define WriteReg(reg, v) (*(Reg(reg)) = (v))
+
+int uart_init(void)
+{
+ // disable interrupts.
+ WriteReg(IER, 0x00);
+
+ // special mode to set baud rate.
+ WriteReg(LCR, LCR_BAUD_LATCH);
+
+ // LSB for baud rate of 38.4K.
+ WriteReg(0, 0x03);
+
+ // MSB for baud rate of 38.4K.
+ WriteReg(1, 0x00);
+
+ // leave set-baud mode,
+ // and set word length to 8 bits, no parity.
+ WriteReg(LCR, LCR_EIGHT_BITS);
+
+ // reset and enable FIFOs.
+ WriteReg(FCR, FCR_FIFO_ENABLE | FCR_FIFO_CLEAR);
+
+ // enable transmit and receive interrupts.
+ // WriteReg(IER, IER_TX_ENABLE | IER_RX_ENABLE);
+
+ //enable UART0 in PLIC
+ plic_irq_enable(UART0_IRQ);
+
+ //set UART0 priority in PLIC
+ plic_prio_set(UART0_IRQ, 1);
+
+ //register callback for UART0
+ //plic_register_callback(UART0_IRQ, uart_intr);
+ puts("[UART0] : Uart Init Done, this is Test output!");
+ return 0;
+}
+
+void uart_putc_nolock(int ch)
+{
+ // wait for Transmit Holding Empty to be set in LSR.
+ while((ReadReg(LSR) & LSR_TX_IDLE) == 0)
+ ;
+ WriteReg(THR, ch);
+ return;
+}
+
+int uart_putc(int ch)
+{
+ int intr_enable = riscv_mintr_get();
+ riscv_mintr_off();
+ uart_putc_nolock(ch);
+ riscv_mintr_restore(intr_enable);
+ return 1;
+}
+
+int uart_puts(const char* str)
+{
+ int i;
+ int intr_enable = riscv_mintr_get();
+ riscv_mintr_off();
+ for(i=0;str[i]!=0;i++)
+ {
+ uart_putc_nolock(str[i]);
+ }
+ uart_putc_nolock('\n');
+ riscv_mintr_restore(intr_enable);
+ return i;
+}
+
+
diff --git a/ports/risc-v32/gnu/example_build/qemu_virt/uart.h b/ports/risc-v32/gnu/example_build/qemu_virt/uart.h
new file mode 100644
index 000000000..debfd9dfa
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/qemu_virt/uart.h
@@ -0,0 +1,23 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2026-present Eclipse ThreadX contributors
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+#ifndef RISCV_UART_H
+#define RISCV_UART_H
+
+#define UART0 0x10000000L
+#define UART0_IRQ 10
+
+#define puts uart_puts
+int uart_init(void);
+int uart_putc(int ch);
+void uart_putc_nolock(int ch);
+int uart_puts(const char* str);
+#endif
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/CMakeLists.txt b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/CMakeLists.txt
new file mode 100644
index 000000000..0d8c22eac
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/CMakeLists.txt
@@ -0,0 +1,77 @@
+cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
+
+project(demo_threadx
+ LANGUAGES C ASM
+)
+
+set(SRCS
+ ${CMAKE_CURRENT_LIST_DIR}/demo_threadx.c
+ ${CMAKE_CURRENT_LIST_DIR}/pre_main.c
+ ${CMAKE_CURRENT_LIST_DIR}/boards/board_riscv_dummy/src/uart/board_uart.c
+ ${CMAKE_CURRENT_LIST_DIR}/boards/board_riscv_dummy/src/board_init.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/csi/csi2/src/csi_misc.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/libc_threadx/mini_printf.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/libc_threadx/newlib_stub.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/arch/e906fdp/startup.S
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/arch/e906fdp/vectors.S
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/arch/e906fdp/system.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/arch/e906fdp/trap_c.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/drivers/dw_uart_ll.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/drivers/uart.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/devices.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/feature.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/irq_port.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/irq.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/pre_main.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/sys_clk.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/target_get.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/tick.c
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/src/sys/weak.c
+)
+
+include_directories(
+ ${CMAKE_CURRENT_LIST_DIR}/../../../../../common/inc
+ ${CMAKE_CURRENT_LIST_DIR}/../../inc
+ ${CMAKE_CURRENT_LIST_DIR}
+ ${CMAKE_CURRENT_LIST_DIR}/boards/board_riscv_dummy/include
+ ${CMAKE_CURRENT_LIST_DIR}/components/csi/csi2/include
+ ${CMAKE_CURRENT_LIST_DIR}/components/libc_threadx/include
+ ${CMAKE_CURRENT_LIST_DIR}/components/libc_threadx/compilers/gcc
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/include
+ ${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/include/asm
+)
+
+add_compile_options(
+ -Os -g -Wno-main
+ -Wpointer-arith -Wno-undef -ffunction-sections -fdata-sections -fno-inline-functions -fno-builtin -fno-strict-aliasing
+ -DCONFIG_SUPPORT_TSPEND=1
+ -DCONFIG_ARCH_MAINSTACK=4096
+ -DCONFIG_ARCH_INTERRUPTSTACK=4096
+ -DCONFIG_SUPPORT_IRQ_NESTED=1
+ -DCONFIG_INTC_CLIC=1
+ -DCONFIG_INTC_CLINT=1
+ -DCONFIG_XIP=1
+ -DCONFIG_LIBC_MINI_PRINTF_SUPPORT=1
+ -DCONFIG_SYSTICK_HZ=100
+ -DCONFIG_BOARD_SMARTL_EVB=1
+ -DCONFIG_CPU_XUANTIE_E906FDP=1
+ -DCONFIG_KERNEL_THREADX=1
+ -DTX_INCLUDE_USER_DEFINE_FILE
+)
+
+add_link_options(
+ -nostartfiles -Wl,--gc-sections
+ -T${CMAKE_CURRENT_LIST_DIR}/components/chip_riscv_dummy/gcc_flash_smartl.ld
+ -Wl,-zmax-page-size=1024
+ -Wl,-Map=${PROJECT_NAME}.map
+)
+
+link_directories(${CMAKE_CURRENT_LIST_DIR}/../../../../../build)
+add_executable(${PROJECT_NAME} ${SRCS})
+set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf")
+target_link_libraries(${PROJECT_NAME} PRIVATE threadx)
+
+add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+ COMMAND ${OBJDUMP} -d $ > ${PROJECT_NAME}.asm
+ COMMENT "Generating ASM disassembly files"
+)
\ No newline at end of file
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/board.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/board.h
new file mode 100644
index 000000000..a0f81d7aa
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/board.h
@@ -0,0 +1,444 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ This is an example board.h for Board Component, New Board should follow the macro defines.
+*/
+
+#ifndef __BOARD_H__
+#define __BOARD_H__
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Common Board Features Define
+
+/*
+ The Common BOARD_XXX Macro Defines Boards supported features which may reference by Solutions.
+ Common board macro include:
+ . BOARD_NAME
+ · UART
+ · GPIO
+ · PWM
+ · ADC
+ · BUTTON
+ · LED
+ · WIFI
+ · BT
+ · AUDIO
+ BOARD_XXX Macro described below should be defined if the board support.
+*/
+
+/****************************************************************************/
+
+/*
+ This riscv dummy board include:
+ · UART x1
+ · GPIO x2
+ · PWM x2
+ · ADC x1
+ · BUTTON x2
+ · LED x2
+ · WIFI x0
+ · BT x0
+ · AUDIO x1
+*/
+
+#ifndef CONFIG_BOARD_UART
+#define CONFIG_BOARD_UART 1
+#endif
+
+#ifndef CONFIG_BOARD_GPIO
+#define CONFIG_BOARD_GPIO 0
+#endif
+
+#ifndef CONFIG_BOARD_PWM
+#define CONFIG_BOARD_PWM 0
+#endif
+
+#ifndef CONFIG_BOARD_ADC
+#define CONFIG_BOARD_ADC 0
+#endif
+
+#ifndef CONFIG_BOARD_BUTTON
+#define CONFIG_BOARD_BUTTON 0
+#endif
+
+#ifndef CONFIG_BOARD_LED
+#define CONFIG_BOARD_LED 0
+#endif
+
+#ifndef CONFIG_BOARD_WIFI
+#define CONFIG_BOARD_WIFI 0
+#endif
+
+#ifndef CONFIG_BOARD_BT
+#define CONFIG_BOARD_BT 0
+#endif
+
+#ifndef CONFIG_BOARD_AUDIO
+#define CONFIG_BOARD_AUDIO 0
+#endif
+
+#define BOARD_NAME "RISCV_DUMMY"
+
+/* the board pins, can be used as uart, gpio, pwd... */
+#define BOARD_PIN0 (0)
+#define BOARD_PIN1 (1)
+#define BOARD_PIN2 (2)
+#define BOARD_PIN3 (3)
+#define BOARD_PIN4 (4)
+#define BOARD_PIN5 (5)
+#define BOARD_PIN6 (6)
+#define BOARD_PIN7 (7)
+#define BOARD_PIN8 (8)
+#define BOARD_PIN9 (9)
+#define BOARD_PIN10 (10)
+#define BOARD_PIN11 (11)
+#define BOARD_PIN12 (12)
+//...
+
+#if defined(CONFIG_BOARD_UART) && CONFIG_BOARD_UART
+// UART
+
+/*
+ The total supported uart numbers on this board, 0 means No uart support.
+ the BOARD_UART_XXX, x in range of (0, BOARD_UART_NUM - 1)
+*/
+#ifndef BOARD_UART_NUM
+#define BOARD_UART_NUM (1)
+#endif
+
+#if defined(BOARD_UART_NUM) && BOARD_UART_NUM > 0
+/* the board uart0 tx pin */
+#define BOARD_UART0_TX_PIN (BOARD_PIN0)
+/* the borad uart0 rx pin */
+#define BOARD_UART0_RX_PIN (BOARD_PIN1)
+/* The real UART port reference to board logic port 0 */
+#define BOARD_UART0_IDX (0)
+/* The default baudrate for uart0 */
+#define BOARD_UART0_BAUD (115200)
+
+//#define BOARD_UART1_IDX (1)
+//#define BOARD_UART1_BAUD (115200)
+// ...
+#endif // defined(BOARD_UART_NUM) && BOARD_UART_NUM > 0
+
+#endif // defined(CONFIG_BOARD_UART) && CONFIG_BOARD_UART
+
+#if defined(CONFIG_BOARD_GPIO) && CONFIG_BOARD_GPIO
+// GPIO
+/*
+ The total supported GPIO Pin numbers on this board, 0 meas No uart support.
+ the BOARD_GPIO_PIN, x in rang of (0, BOARD_GPIO_PIN_NUM - 1)
+*/
+#ifndef BOARD_GPIO_PIN_NUM
+#define BOARD_GPIO_PIN_NUM (2)
+#endif
+
+#if defined(BOARD_GPIO_PIN_NUM) && BOARD_GPIO_PIN_NUM > 0
+/* The real gpio reference to board logic gpio pin */
+#define BOARD_GPIO_PIN0 (BOARD_PIN2)
+#define BOARD_GPIO_PIN1 (BOARD_PIN3)
+//#define BOARD_GPIO_PIN2 (x)
+//#define BOARD_GPIO_PIN3 (x)
+#endif // defined(BOARD_GPIO_PIN_NUM) && BOARD_GPIO_PIN_NUM > 0
+#endif // defined(CONFIG_BOARD_GPIO) && CONFIG_BOARD_GPIO
+
+#if defined(CONFIG_BOARD_PWM) && CONFIG_BOARD_PWM
+// PWM
+/* the board supported pwm channels */
+#ifndef BOARD_PWM_NUM
+#define BOARD_PWM_NUM (2)
+#endif
+
+#if defined(BOARD_PWM_NUM) && BOARD_PWM_NUM > 0
+/* the board pwm pin */
+#define BOARD_PWM0_PIN (BOARD_PIN4)
+/* The real pwm channel reference to board logic pwm channel */
+#define BOARD_PWM0_CH (0)
+
+#define BOARD_PWM1_PIN (BOARD_PIN5)
+#define BOARD_PWM1_CH (1)
+#endif // defined(BOARD_PWM_NUM) && BOARD_PWM_NUM > 0
+#endif // defined(CONFIG_BOARD_PWM) && CONFIG_BOARD_PWM
+
+#if defined(CONFIG_BOARD_ADC) && CONFIG_BOARD_ADC > 0
+// ADC
+/* the board supported adc channels */
+#ifndef BOARD_ADC_NUM
+#define BOARD_ADC_NUM (1)
+#endif
+
+#if defined(BOARD_ADC_NUM) && BOARD_ADC_NUM > 0
+/* the board adc pin */
+#define BOARD_ADC0_PIN (BOARD_PIN6)
+/* The real adc channel reference to board logic adc channel */
+#define BOARD_ADC0_CH (0)
+#endif // defined(BOARD_ADC_NUM) && BOARD_ADC_NUM > 0
+#endif // defined(CONFIG_BOARD_ADC) && CONFIG_BOARD_ADC > 0
+
+#if defined(CONFIG_BOARD_BUTTON) && CONFIG_BOARD_BUTTON > 0
+// BUTTON
+#ifndef BOARD_BUTTON_NUM
+/*
+ the board supported buttons, include gpio button and adc button,
+ BOARD_BUTTON_NUM = BOARD_BUTTON_GPIO_NUM + BOARD_BUTTON_ADC_NUM.
+
+*/
+#define BOARD_BUTTON_NUM (4)
+#endif
+
+#if defined(BOARD_BUTTON_NUM) && BOARD_BUTTON_NUM > 0
+
+#define BOARD_BUTTON0_PIN (BOARD_PIN7)
+#define BOARD_BUTTON1_PIN (BOARD_PIN8)
+#define BOARD_BUTTON2_PIN (BOARD_PIN9)
+#define BOARD_BUTTON3_PIN (BOARD_PIN10)
+
+// GPIO BUTTON
+/* the board supported GPIO Buttons */
+#ifndef BOARD_BUTTON_GPIO_NUM
+#define BOARD_BUTTON_GPIO_NUM (2)
+#endif
+
+#if defined(BOARD_BUTTON_GPIO_NUM) && BOARD_BUTTON_GPIO_NUM > 0
+/* the board logic button id, in range of (0, BOARD_BUTTON_GPIO_NUM - 1) */
+#define BOARD_BUTTON0 (0)
+/* for gpio button, define the pin numner. if the gpio pin used as gpio button, it shoudn't reference as BOARD_GPIO_PINx
+ */
+#define BOARD_BUTTON0_GPIO_PIN (BOARD_BUTTON0_PIN)
+
+#define BOARD_BUTTON1 (1)
+#define BOARD_BUTTON1_GPIO_PIN (BOARD_BUTTON1_PIN)
+#endif // defined(BOARD_BUTTON_GPIO_NUM) && BOARD_BUTTON_GPIO_NUM > 0
+
+// ADC BUTTON
+/* the board supported adc Buttons */
+#ifndef BOARD_BUTTON_ADC_NUM
+#define BOARD_BUTTON_ADC_NUM (2)
+#endif
+
+#if defined(BOARD_BUTTON_ADC_NUM) && BOARD_BUTTON_ADC_NUM > 0
+/* the board logic adc button id, in range of (BOARD_BUTTON_GPIO_NUM, BOARD_BUTTON_NUM - 1), if not suuport GPIO Button,
+ * BOARD_BUTTON_GPIO_NUM should be 0 */
+#define BOARD_BUTTON2 (BOARD_BUTTON_GPIO_NUM + 0)
+#define BOARD_BUTTON2_ADC_PIN (BOARD_BUTTON2_PIN)
+/* the adc channel used for button2, if the adc channel used as adc button, it shoudn't reference as BOARD_ADCx_CH*/
+#define BOARD_BUTTON2_ADC_CH (1)
+/* the adc device name */
+#define BOARD_BUTTON2_ADC_NAME "adc1"
+/* adc voltage reference */
+#define BOARD_BUTTON2_ADC_REF (100)
+/* adc voltage range */
+#define BOARD_BUTTON2_ADC_RANG (500)
+
+#define BOARD_BUTTON3 (BOARD_BUTTON_GPIO_NUM + 1)
+#define BOARD_BUTTON3_ADC_PIN (BOARD_BUTTON3_PIN)
+#define BOARD_BUTTON3_ADC_CH (1)
+#define BOARD_BUTTON3_ADC_NAME "adc1"
+#define BOARD_BUTTON3_ADC_REF (600)
+#define BOARD_BUTTON3_ADC_RANG (500)
+
+//#define BOARD_ADC_BUTTON2 (2)
+//#define BOARD_ADC_BUTTON2_CH (1)
+//#define BOARD_ADC_BUTTON2_NAME "adc1"
+//#define BOARD_ADC_BUTTON2_REF xxx
+//#define BOARD_ADC_BUTTON2_RANG xxx
+#endif // defined(BOARD_BUTTON_ADC_NUM) && BOARD_BUTTON_ADC_NUM > 0
+
+#endif // defined(BOARD_BUTTON_NUM) && BOARD_BUTTON_NUM > 0
+
+#endif // defined(BOARD_BUTTON_NUM) && BOARD_BUTTON_NUM > 0
+
+#if defined(CONFIG_BOARD_LED) && CONFIG_BOARD_LED > 0
+// LED
+/* the board supported leds */
+#ifndef BOARD_LED_NUM
+#define BOARD_LED_NUM (2)
+#endif
+
+#define BOARD_LED0_PIN BOARD_PIN11
+#define BOARD_LED1_PIN BOARD_PIN12
+
+// PWM LED
+/* the board supported pwm leds */
+#ifndef BOARD_LED_PWM_NUM
+#define BOARD_LED_PWM_NUM (1)
+#endif
+
+#if defined(BOARD_LED_PWM_NUM) && BOARD_LED_PWM_NUM > 0
+#define BOARD_LED0_PWM_PIN (BOARD_LED0_PIN)
+/* the pwm channel used for led0, if the pwm channel used as led0, it shoudn't reference as BOARD_PWMx_CH */
+#define BOARD_LED0_PWM_CH (0)
+#endif // defined(BOARD_LED_PWM_NUM) && BOARD_LED_PWM_NUM > 0
+
+// GPIO LED
+#ifndef BOARD_LED_GPIO_NUM
+#define BOARD_LED_GPIO_NUM (1)
+#endif
+
+#if defined(BOARD_LED_GPIO_NUM) && BOARD_LED_GPIO_NUM > 0
+/* the gpio pin used for led0, if the gpio pin used as led, it shoudn't reference as BOARD_GPIO_PINx */
+#define BOARD_LED1_GPIO_PIN (BOARD_LED1_PIN)
+#endif // defined(BOARD_LED_GPIO_NUM) && BOARD_LED_GPIO_NUM > 0
+#endif // defined(CONFIG_BOARD_LED) && CONFIG_BOARD_LED > 0
+
+#if defined(CONFIG_BOARD_BT) && CONFIG_BOARD_BT > 0
+// BT
+/* the board support bluetooth */
+#ifndef BOARD_BT_SUPPORT
+#define BOARD_BT_SUPPORT 1
+#endif
+#endif // defined(CONFIG_BOARD_BT) && CONFIG_BOARD_BT > 0
+
+#if defined(CONFIG_BOARD_WIFI) && CONFIG_BOARD_WIFI > 0
+// WIFI
+/* the board support wifi */
+#ifndef BOARD_WIFI_SUPPORT
+#define BOARD_WIFI_SUPPORT 1
+#endif
+#endif // defined(CONFIG_BOARD_WIFI) && CONFIG_BOARD_WIFI > 0
+
+#if defined(CONFIG_BOARD_AUDIO) && CONFIG_BOARD_AUDIO > 0
+// Audio
+/* the board support audio */
+#ifndef BOARD_AUDIO_SUPPORT
+#define BOARD_AUDIO_SUPPORT 1
+#endif
+#endif // defined(CONFIG_BOARD_AUDIO) && CONFIG_BOARD_AUDIO > 0
+
+/****************************************************************************/
+// Common solutions defines
+
+// Console config, Almost all solutions and demos use these.
+#ifndef CONSOLE_UART_IDX
+#define CONSOLE_UART_IDX (BOARD_UART0_IDX)
+#endif
+
+#ifndef CONFIG_CLI_USART_BAUD
+#define CONFIG_CLI_USART_BAUD (BOARD_UART0_BAUD)
+#endif
+
+#ifndef CONFIG_CONSOLE_UART_BUFSIZE
+#define CONFIG_CONSOLE_UART_BUFSIZE (128)
+#endif
+
+/****************************************************************************/
+// Commom test demos defines
+
+// i2c
+#define EXAMPLE_IIC_IDX 0 // 1
+#define EXAMPLE_PIN_IIC_SDA 0 // PC1
+#define EXAMPLE_PIN_IIC_SCL 0 // PC0
+#define EXAMPLE_PIN_IIC_SDA_FUNC 0 // PC1_I2C1_SDA
+#define EXAMPLE_PIN_IIC_SCL_FUNC 0 // PC0_I2C1_SCL
+
+// adc
+#define EXAMPLE_ADC_CH0 0 // PA8
+#define EXAMPLE_ADC_CH0_FUNC 0 // PA8_ADC_A0
+#define EXAMPLE_ADC_CH12 0 // PA26
+#define EXAMPLE_ADC_CH12_FUNC 0 // PA26_ADC_A12
+
+#define EXAMPLE_TIMER_IDX 0
+
+/****************************************************************************/
+// Vendor board defines
+
+/* other board specific defines */
+//#define CUSTOM_BOARD_xxx
+
+/****************************************************************************/
+/**
+ * @brief init the board for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_init(void);
+
+/**
+ * @brief init the board gpio pin for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_gpio_pin_init(void);
+
+/**
+ * @brief init the board uart for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_uart_init(void);
+
+/**
+ * @brief init the board pwm for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_pwm_init(void);
+
+/**
+ * @brief init the board adc for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_adc_init(void);
+
+/**
+ * @brief init the board button for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_button_init(void);
+
+/**
+ * @brief init the board led for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_led_init(void);
+
+/**
+ * @brief init the board wifi for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_wifi_init(void);
+
+/**
+ * @brief init the board bt for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_bt_init(void);
+
+/**
+ * @brief init the board audio for default: pin mux, etc.
+ * re-implement if need.
+ * @return
+ */
+void board_audio_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOARD_H__ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/csi_config.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/csi_config.h
new file mode 100644
index 000000000..8e1af58fa
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/include/csi_config.h
@@ -0,0 +1,26 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CSI_CONFIG_H__
+#define __CSI_CONFIG_H__
+
+
+
+
+
+#endif /* __CSI_CONFIG_H__ */
\ No newline at end of file
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/board_init.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/board_init.c
new file mode 100644
index 000000000..b994f6ce9
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/board_init.c
@@ -0,0 +1,83 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+
+void board_init(void)
+{
+ /* some board preconfig */
+ // board_xxx();
+
+#if defined(BOARD_GPIO_PIN_NUM) && BOARD_GPIO_PIN_NUM > 0
+ board_gpio_pin_init();
+#endif
+
+#if defined(BOARD_UART_NUM) && BOARD_UART_NUM > 0
+#if !defined(RT_DEBUG_INIT) || !RT_DEBUG_INIT
+ board_uart_init();
+#endif
+#endif
+
+#if defined(BOARD_PWM_NUM) && BOARD_PWM_NUM > 0
+ board_pwm_init();
+#endif
+
+#if defined(BOARD_ADC_NUM) && BOARD_ADC_NUM > 0
+ board_adc_init();
+#endif
+
+#if defined(BOARD_BUTTON_NUM) && BOARD_BUTTON_NUM > 0
+ board_button_init();
+#endif
+
+#if defined(BOARD_LED_NUM) && BOARD_LED_NUM > 0
+ board_led_init();
+#endif
+
+#if defined(BOARD_WIFI_SUPPORT) && BOARD_WIFI_SUPPORT > 0
+ board_wifi_init();
+#endif
+
+#if defined(BOARD_BT_SUPPORT) && BOARD_BT_SUPPORT > 0
+ board_bt_init();
+#endif
+
+#if defined(BOARD_AUDIO_SUPPORT) && BOARD_AUDIO_SUPPORT > 0
+ board_audio_init();
+#endif
+}
+
+#ifdef CONFIG_KERNEL_THREADX
+#include
+
+extern unsigned long g_heap_start;
+extern unsigned long g_heap_end;
+
+TX_BYTE_POOL tx_byte_pool_0;
+UCHAR *tx_memory_area;
+
+void tx_mem_pool_init(void)
+{
+ ULONG pool_size = g_heap_end - g_heap_start;
+ tx_memory_area = (UCHAR *)g_heap_start;
+
+ tx_byte_pool_create(&tx_byte_pool_0, "byte pool sys 0", tx_memory_area, pool_size);
+}
+#endif
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/uart/board_uart.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/uart/board_uart.c
new file mode 100644
index 000000000..315e3aedb
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/boards/board_riscv_dummy/src/uart/board_uart.c
@@ -0,0 +1,45 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#if CONFIG_DEVICES_RVM_HAL
+#include
+#else
+#include
+#endif
+
+#if CONFIG_DEVICES_RVM_HAL
+void board_uart_init(void)
+{
+ rvm_uart_drv_register(0);
+}
+#else
+__attribute__((weak)) csi_uart_t g_console_handle;
+
+void board_uart_init(void)
+{
+ /* init the console */
+ csi_uart_init(&g_console_handle, CONSOLE_UART_IDX);
+
+ /* config the UART */
+ csi_uart_baud(&g_console_handle, CONFIG_CLI_USART_BAUD);
+ csi_uart_format(&g_console_handle, UART_DATA_BITS_8, UART_PARITY_NONE, UART_STOP_BITS_1);
+}
+#endif
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_libthreadx.sh b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_libthreadx.sh
new file mode 100755
index 000000000..ff9bb9306
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_libthreadx.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+pushd ../../../../../
+rm -rf build
+cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/xuantie_e906_gnu.cmake .
+cmake --build ./build/
+popd
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_threadx_sample.sh b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_threadx_sample.sh
new file mode 100755
index 000000000..ec91e36a5
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/build_threadx_sample.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+bash build_libthreadx.sh
+
+rm -rf build
+cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=xuantie_e906_gnu.cmake .
+cmake --build ./build/
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/gcc_flash_smartl.ld b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/gcc_flash_smartl.ld
new file mode 100644
index 000000000..19fac7e40
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/gcc_flash_smartl.ld
@@ -0,0 +1,177 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file gcc_csky.ld
+ * @brief csky linker file
+ * @version V1.0
+ * @date 02. June 2017
+ ******************************************************************************/
+MEMORY
+{
+ ISRAM : ORIGIN = 0x00000000 , LENGTH = 0x30000 /* ISRAM 192KB*/
+ DSRAM : ORIGIN = 0x20000000 , LENGTH = 0xC0000 /* DSRAM 768KB*/
+ SRAM : ORIGIN = 0x60000000 , LENGTH = 0x20000 /* SRAM 128KB, no cacheable*/
+}
+
+__min_heap_size = 0x200;
+PROVIDE (__ram_end = 0x200C0000);
+PROVIDE (__heap_end = __ram_end);
+
+REGION_ALIAS("REGION_TEXT", ISRAM);
+REGION_ALIAS("REGION_RODATA", ISRAM);
+REGION_ALIAS("REGION_DATA", DSRAM);
+REGION_ALIAS("REGION_BSS", DSRAM);
+
+ENTRY(Reset_Handler)
+SECTIONS
+{
+ .text : {
+ . = ALIGN(0x4) ;
+ __stext = . ;
+ KEEP(*startup.o(*.text))
+ KEEP(*startup.o(*.vectors))
+ KEEP(*vectors.o(*.text))
+ KEEP(*whetstone.o(*.text))
+ KEEP(*startup.S.obj(*.text))
+ KEEP(*startup.S.obj(*.vectors))
+ KEEP(*vectors.S.obj(*.text))
+ KEEP(*whetstone.c.obj(*.text))
+ KEEP(*(.text.entry))
+ *(.text*)
+ *(.gnu.warning)
+ *(.stub)
+ *(.gnu.linkonce.t*)
+ *(.glue_7t)
+ *(.glue_7)
+ *(.jcr)
+ KEEP (*(.init))
+ KEEP (*(.fini))
+ . = ALIGN (0x4) ;
+ PROVIDE(__ctbp = .);
+ *(.call_table_data)
+ *(.call_table_text)
+ . = ALIGN(0x10) ;
+ __etext = . ;
+ } > REGION_TEXT
+ .eh_frame_hdr : {
+ *(.eh_frame_hdr)
+ } > REGION_TEXT
+ .eh_frame : ONLY_IF_RO {
+ KEEP (*(.eh_frame))
+ } > REGION_TEXT
+ .rodata : {
+ . = ALIGN(0x4) ;
+ __srodata = .;
+ *(.rdata)
+ *(.rdata*)
+ *(.rdata1)
+ *(.rdata.*)
+ *(.rodata*)
+ *(.srodata*)
+ . = ALIGN(0x4) ;
+ __init_array_start = .;
+ __ctors_start__ = .;
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ __init_array_end = .;
+ __ctors_end__ = .;
+
+ __fini_array_start = .;
+ __dtors_start__ = .;
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array))
+ __fini_array_end = .;
+ __dtors_end__ = .;
+ . = ALIGN(0x4) ;
+
+ __ctor_start__ = .;
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ __ctor_end__ = .;
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ __dtor_end__ = .;
+ . = ALIGN(0x4) ;
+ __erodata = .;
+ __rodata_end__ = .;
+ } > REGION_RODATA
+ .data : {
+ . = ALIGN(0x4) ;
+ __sdata = . ;
+ __data_start__ = . ;
+ data_start = . ;
+ *(.got.plt)
+ *(.got)
+ *(.gnu.linkonce.r*)
+ *(.data*)
+ *(.gnu.linkonce.d*)
+ *(.gcc_except_table*)
+ __start_init_call = .;
+ *(.initcall.init)
+ __stop_init_call = .;
+ __start_cmd = .;
+ *(.bootloaddata.cmd)
+ . = ALIGN(0x4) ;
+ __stop_cmd = .;
+ __global_pointer$ = .;
+ *(.sdata)
+ *(.sdata.*)
+ *(.sdata2.*)
+ *(.gnu.linkonce.s.*)
+ *(__libc_atexit)
+ *(__libc_subinit)
+ *(__libc_subfreeres)
+ *(.note.ABI-tag)
+ . = ALIGN(0x4) ;
+ __edata = .;
+ __data_end__ = .;
+ } > REGION_DATA AT > REGION_RODATA
+ ._ram_code : {
+ . = ALIGN(0x4) ;
+ __ram_code_start__ = .;
+ *(.ram.code*)
+ . = ALIGN(0x4) ;
+ __ram_code_end__ = .;
+ } > REGION_DATA AT > REGION_RODATA
+ .bss : ALIGN(0x20) {
+ __sbss = . ;
+ __bss_start__ = . ;
+ KEEP(*linpack.o(*.bss*))
+ *(.dynsbss)
+ *(.sbss)
+ *(.sbss.*)
+ *(.scommon)
+ *(.dynbss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(0x4) ;
+ __ebss = . ;
+ __bss_end__ = .;
+ __end = . ;
+ end = . ;
+ } > REGION_BSS AT > REGION_BSS
+ ._user_heap (NOLOAD): {
+ . = ALIGN(0x4) ;
+ *(.stack*)
+ . = ALIGN(0x4) ;
+ __heap_start = .;
+ . += __min_heap_size;
+ . = ALIGN(0x4) ;
+ } > REGION_BSS AT > REGION_BSS
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_asm_macro.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_asm_macro.h
new file mode 100644
index 000000000..456061ca6
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_asm_macro.h
@@ -0,0 +1,538 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * attention: don't modify this file as a suggest
+ * you should copy from chip_riscv_dummy/include/asm/riscv_asm_macro.h and keep it newer
+ * please contact xuantie-rtos os team if have question
+ */
+
+#ifndef __RISCV_ASM_MACRO_H__
+#define __RISCV_ASM_MACRO_H__
+
+
+#include "riscv_csr.h"
+
+.macro RESTORE_xSTATUS
+ /* t0 and t1 are not restored before using */
+ /* now, sp is at the top of the stack (the lowest address)*/
+ li t1, 0
+#if __riscv_matrix || __riscv_xtheadmatrix /* matrix registers */
+#if __riscv_xlen == 64
+ addi t1, t1, (12 + 12)
+#else
+ addi t1, t1, 12
+#endif /*__riscv_xlen */
+ csrr t0, xmlenb
+ slli t0, t0, 3
+ add t1, t1, t0
+#endif /* __riscv_matrix || __riscv_xtheadmatrix */
+
+#ifdef __riscv_vector /* vector registers */
+ csrr t0, vlenb
+ slli t0, t0, 5
+ add t1, t1, t0
+#if __riscv_xlen == 64
+ addi t1, t1, (20+20)
+#else
+ addi t1, t1, 20
+#endif /* __riscv_xlen */
+#endif /* __riscv_vector */
+
+#if __riscv_flen == 64 /* float registers */
+#if __riscv_xlen == 64
+ addi t1, t1, 168
+#else
+ addi t1, t1, 164
+#endif /* __riscv_xlen */
+
+#elif __riscv_flen == 32
+ addi t1, t1, 84
+#endif /* __riscv_flen */
+
+#ifdef __riscv_dsp /* vxsat register, 32-bit cpu only */
+ addi t1, t1, 4
+#endif /* __riscv_dsp */
+
+#if __riscv_xlen == 64 /*general purpose registers*/
+ addi t1, t1, (72 + 72)
+#elif __riscv_xlen == 32
+ addi t1, t1, 72
+#endif
+ add t1, sp, t1
+
+ /* now, t1 is the position of mstatus */
+ load_x t3, (0)(t1)
+ csrw MODE_PREFIX(status), t3
+.endm
+
+.macro SAVE_VECTOR_REGISTERS
+ /* t0,t1 saved before using */
+ /* mstatus->t3 */
+#ifdef __riscv_vector
+#if CONFIG_CHECK_VECTOR_DIRTY
+ /* check if VS filed of MSTATUS is 'dirty' */
+ li t1, SR_VS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_VECTOR_DIRTY */
+
+ /* if dirty, save vector registers */
+#if __riscv_xlen == 64
+ addi sp, sp, -(20+20)
+ csrr t0, vl
+ store_x t0, (0 +0 )(sp)
+ csrr t0, vtype
+ store_x t0, (4 +4 )(sp)
+ csrr t0, vstart
+ store_x t0, (8 +8 )(sp)
+ csrr t0, vxsat
+ store_x t0, (12 +12 )(sp)
+ csrr t0, vxrm
+ store_x t0, (16 +16 )(sp)
+#else
+ addi sp, sp, -20
+ csrr t0, vl
+ store_x t0, (0)(sp)
+ csrr t0, vtype
+ store_x t0, (4)(sp)
+ csrr t0, vstart
+ store_x t0, (8)(sp)
+ csrr t0, vxsat
+ store_x t0, (12)(sp)
+ csrr t0, vxrm
+ store_x t0, (16)(sp)
+#endif /*__riscv_xlen */
+
+ csrr t0, vlenb
+ slli t0, t0, 3
+ slli t1, t0, 2
+ sub sp, sp, t1
+#if (__riscv_v == 7000)
+ vsetvli zero, zero, e8, m8
+ vsb.v v0, (sp)
+ add sp, sp, t0
+ vsb.v v8, (sp)
+ add sp, sp, t0
+ vsb.v v16, (sp)
+ add sp, sp, t0
+ vsb.v v24, (sp)
+#elif (__riscv_v == 1000000)
+ vsetvli zero, zero, e8, m8, ta, ma
+ vs8r.v v0, (sp)
+ add sp, sp, t0
+ vs8r.v v8, (sp)
+ add sp, sp, t0
+ vs8r.v v16, (sp)
+ add sp, sp, t0
+ vs8r.v v24, (sp)
+#endif
+ sub t0, t1, t0
+ sub sp, sp, t0
+#if CONFIG_CHECK_VECTOR_DIRTY
+ j 2f
+1: /* don't need to save vector registers, set sp */
+#if __riscv_xlen == 64
+ addi sp, sp, -(20+20)
+#else
+ addi sp, sp, -20
+#endif
+ csrr t0, vlenb
+ slli t0, t0, 5
+ sub sp, sp, t0
+2:
+#endif /* CONFIG_CHECK_VECTOR_DIRTY */
+#endif /*__riscv_vector*/
+.endm
+
+.macro RESTORE_VECTOR_REGISTERS
+ /* t0,t1,t2 not restored before using, mstatus has been restored before using */
+#ifdef __riscv_vector
+#if CONFIG_CHECK_VECTOR_DIRTY
+ /* check if VS filed of MSTATUS is 'dirty' */
+ li t1, SR_VS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_VECTOR_DIRTY */
+
+ /* get the range of register */
+ csrr t0, vlenb
+ slli t0, t0, 3
+
+ /* save */
+#if (__riscv_v == 7000)
+ vsetvli zero, zero, e8, m8
+ vlb.v v0, (sp)
+ add sp, sp, t0
+ vlb.v v8, (sp)
+ add sp, sp, t0
+ vlb.v v16, (sp)
+ add sp, sp, t0
+ vlb.v v24, (sp)
+ add sp, sp, t0
+#elif (__riscv_v == 1000000)
+ vsetvli zero, zero, e8, m8, ta, ma
+ vl8r.v v0, (sp)
+ add sp, sp, t0
+ vl8r.v v8, (sp)
+ add sp, sp, t0
+ vl8r.v v16, (sp)
+ add sp, sp, t0
+ vl8r.v v24, (sp)
+ add sp, sp, t0
+#endif
+#if __riscv_xlen == 64
+ load_x t0, (0 +0)(sp)
+ load_x t1, (4 +4)(sp)
+ load_x t2, (8 +8)(sp)
+ vsetvl zero, t0, t1
+ csrw vstart, t2
+ load_x t2, (12 +12)(sp)
+ csrw vxsat, t2
+ load_x t2, (16 +16)(sp)
+ csrw vxrm, t2
+ addi sp, sp, (20+20)
+#else
+ load_x t0, (0)(sp)
+ load_x t1, (4)(sp)
+ load_x t2, (8)(sp)
+ vsetvl zero, t0, t1
+ csrw vstart, t2
+ load_x t2, (12)(sp)
+ csrw vxsat, t2
+ load_x t2, (16)(sp)
+ csrw vxrm, t2
+ addi sp, sp, 20
+#endif /*__riscv_xlen */
+#if CONFIG_CHECK_VECTOR_DIRTY
+ j 2f
+1:
+ /* don't restore, move sp only */
+#if __riscv_xlen == 64
+ addi sp, sp, (20+20)
+#else
+ addi sp, sp, (20)
+#endif
+ csrr t0, vlenb
+ slli t0, t0, 5
+ add sp, sp, t0
+2:
+#endif /* CONFIG_CHECK_VECTOR_DIRTY */
+#endif /*__riscv_vector*/
+.endm
+
+
+.macro SAVE_FLOAT_REGISTERS
+ /* t0, t1 saved before using */
+#if __riscv_flen == 64
+#if CONFIG_CHECK_FPU_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_FS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /*CONFIG_CHECK_FPU_DIRTY*/
+
+ /* save */
+#if __riscv_xlen == 64
+ addi sp, sp, -(4+4)
+ frcsr t0
+ store_x t0, (0 +0 )(sp)
+#else
+ addi sp, sp, -4
+ frcsr t0
+ store_x t0, 0(sp)
+#endif /*__riscv_xlen */
+
+ addi sp, sp, -160
+ fstore_x ft0, (0 +0 )(sp)
+ fstore_x ft1, (4 +4 )(sp)
+ fstore_x ft2, (8 +8 )(sp)
+ fstore_x ft3, (12+12)(sp)
+ fstore_x ft4, (16+16)(sp)
+ fstore_x ft5, (20+20)(sp)
+ fstore_x ft6, (24+24)(sp)
+ fstore_x ft7, (28+28)(sp)
+ fstore_x fa0, (32+32)(sp)
+ fstore_x fa1, (36+36)(sp)
+ fstore_x fa2, (40+40)(sp)
+ fstore_x fa3, (44+44)(sp)
+ fstore_x fa4, (48+48)(sp)
+ fstore_x fa5, (52+52)(sp)
+ fstore_x fa6, (56+56)(sp)
+ fstore_x fa7, (60+60)(sp)
+ fstore_x ft8, (64+64)(sp)
+ fstore_x ft9, (68+68)(sp)
+ fstore_x ft10,(72+72)(sp)
+ fstore_x ft11,(76+76)(sp)
+#elif __riscv_flen == 32
+#if CONFIG_CHECK_FPU_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_FS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_FPU_DIRTY */
+
+ addi sp, sp, -4
+ frcsr t0
+ store_x t0, 0(sp)
+
+ addi sp, sp, -80
+ fstore_x ft0, 0(sp)
+ fstore_x ft1, 4(sp)
+ fstore_x ft2, 8(sp)
+ fstore_x ft3, 12(sp)
+ fstore_x ft4, 16(sp)
+ fstore_x ft5, 20(sp)
+ fstore_x ft6, 24(sp)
+ fstore_x ft7, 28(sp)
+ fstore_x fa0, 32(sp)
+ fstore_x fa1, 36(sp)
+ fstore_x fa2, 40(sp)
+ fstore_x fa3, 44(sp)
+ fstore_x fa4, 48(sp)
+ fstore_x fa5, 52(sp)
+ fstore_x fa6, 56(sp)
+ fstore_x fa7, 60(sp)
+ fstore_x ft8, 64(sp)
+ fstore_x ft9, 68(sp)
+ fstore_x ft10,72(sp)
+ fstore_x ft11,76(sp)
+#endif /*__riscv_flen */
+#if CONFIG_CHECK_FPU_DIRTY
+ j 2f
+1:
+ /* don't store, move sp only */
+#if __riscv_flen == 64
+#if __riscv_xlen == 64
+ addi sp, sp, -168
+#else
+ addi sp, sp, -164
+#endif /*__riscv_xlen */
+#elif __riscv_flen == 32
+ addi sp, sp, -84
+#endif /* __riscv_xlen */
+2:
+#endif
+.endm
+
+.macro RESTORE_FLOAT_REGISTERS
+ /* t0 and t1 are not restored before using, mstatus has been restored before using */
+#if __riscv_flen == 64
+#if CONFIG_CHECK_FPU_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_FS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_FPU_DIRTY */
+
+ /* restore */
+ fload_x ft0, (0 +0 )(sp)
+ fload_x ft1, (4 +4 )(sp)
+ fload_x ft2, (8 +8 )(sp)
+ fload_x ft3, (12+12)(sp)
+ fload_x ft4, (16+16)(sp)
+ fload_x ft5, (20+20)(sp)
+ fload_x ft6, (24+24)(sp)
+ fload_x ft7, (28+28)(sp)
+ fload_x fa0, (32+32)(sp)
+ fload_x fa1, (36+36)(sp)
+ fload_x fa2, (40+40)(sp)
+ fload_x fa3, (44+44)(sp)
+ fload_x fa4, (48+48)(sp)
+ fload_x fa5, (52+52)(sp)
+ fload_x fa6, (56+56)(sp)
+ fload_x fa7, (60+60)(sp)
+ fload_x ft8, (64+64)(sp)
+ fload_x ft9, (68+68)(sp)
+ fload_x ft10,(72+72)(sp)
+ fload_x ft11,(76+76)(sp)
+ addi sp, sp, 160
+
+#if __riscv_xlen == 64
+ load_x t0, (0 +0)(sp)
+ fscsr t0
+ addi sp, sp, (4+4)
+#else
+ load_x t0, 0(sp)
+ fscsr t0
+ addi sp, sp, 4
+#endif /*__riscv_xlen */
+#elif __riscv_flen == 32
+#if CONFIG_CHECK_FPU_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_FS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_FPU_DIRTY */
+
+ /* restore */
+ fload_x ft0, 0(sp)
+ fload_x ft1, 4(sp)
+ fload_x ft2, 8(sp)
+ fload_x ft3, 12(sp)
+ fload_x ft4, 16(sp)
+ fload_x ft5, 20(sp)
+ fload_x ft6, 24(sp)
+ fload_x ft7, 28(sp)
+ fload_x fa0, 32(sp)
+ fload_x fa1, 36(sp)
+ fload_x fa2, 40(sp)
+ fload_x fa3, 44(sp)
+ fload_x fa4, 48(sp)
+ fload_x fa5, 52(sp)
+ fload_x fa6, 56(sp)
+ fload_x fa7, 60(sp)
+ fload_x ft8, 64(sp)
+ fload_x ft9, 68(sp)
+ fload_x ft10,72(sp)
+ fload_x ft11,76(sp)
+ addi sp, sp, 80
+
+ load_x t0, 0(sp)
+ fscsr t0
+ addi sp, sp, 4
+#endif /*__riscv_flen */
+#if CONFIG_CHECK_FPU_DIRTY
+ j 2f
+1:
+ /* don't restore, move sp only */
+#if __riscv_flen == 64
+#if __riscv_xlen == 64
+ addi sp, sp, 168
+#elif __riscv_xlen == 32
+ addi sp, sp, 164
+#endif
+#elif __riscv_flen == 32
+ addi sp, sp, 84
+#endif /* __riscv_flen */
+2:
+#endif /* CONFIG_CHECK_FPU_DIRTY */
+.endm
+
+.macro SAVE_MATRIX_REGISTERS
+ /* t0,t1 saved before using */
+
+#if __riscv_matrix || __riscv_xtheadmatrix
+#if CONFIG_CHECK_MATRIX_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_MS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_MATRIX_DIRTY */
+
+ /* store */
+#if __riscv_xlen == 64
+ addi sp, sp, -(12+12)
+ csrr t0, xmrstart
+ store_x t0, (0 +0 )(sp)
+ csrr t0, xmcsr
+ store_x t0, (4 +4 )(sp)
+ csrr t0, xmsize
+ store_x t0, (8 +8 )(sp)
+#else
+ addi sp, sp, -12
+ csrr t0, xmrstart
+ store_x t0, (0)(sp)
+ csrr t0, xmcsr
+ store_x t0, (4)(sp)
+ csrr t0, xmsize
+ store_x t0, (8)(sp)
+#endif /*__riscv_xlen */
+
+ csrr t0, xmlenb
+ slli t1, t0, 3
+ sub sp, sp, t1
+ csrw xmrstart, x0
+ mst8mb m0, (sp)
+#if CONFIG_CHECK_MATRIX_DIRTY
+ j 2f
+1:
+ /* don't save, move sp only */
+ csrr t0, xmlenb
+ slli t1, t0, 3
+ sub sp, sp, t1
+#if __riscv_xlen == 64
+ addi sp, sp, -24
+#else
+ addi sp, sp, -12
+#endif
+2:
+#endif /* CONFIG_CHECK_MATRIX_DIRTY */
+#endif /* __riscv_matrix || __riscv_xtheadmatrix */
+.endm
+
+.macro RESTORE_MATRIX_REGISTERS
+ /* t0 and t1 are not restored before using, mstatus has been restored before using */
+
+#if __riscv_matrix || __riscv_xtheadmatrix
+#if CONFIG_CHECK_MATRIX_DIRTY
+ /* check if FS filed of MSTATUS is 'dirty' */
+ li t1, SR_MS_DIRTY
+ and t4, t3, t1
+ bne t4, t1, 1f
+#endif /* CONFIG_CHECK_MATRIX_DIRTY */
+
+ /* restore */
+ csrr t0, xmlenb
+ slli t1, t0, 3
+ csrw xmrstart, x0
+ mld8mb m0, (sp)
+ add sp, sp, t1
+#if __riscv_xlen == 64
+ load_x t0, (0 + 0)(sp)
+ csrw xmrstart, t0
+ load_x t0, (4 + 4)(sp)
+ csrw xmcsr, t0
+ load_x t0, (8 + 8)(sp)
+ csrw xmsize, t0
+ addi sp, sp, (12+12)
+#else
+ load_x t0, (0)(sp)
+ csrw xmrstart, t0
+ load_x t0, (4)(sp)
+ csrw xmcsr, t0
+ load_x t0, (8)(sp)
+ csrw xmsize, t0
+ addi sp, sp, 12
+#endif /*__riscv_xlen */
+#if CONFIG_CHECK_MATRIX_DIRTY
+ j 2f
+1:
+ /* don't restore, move sp only */
+ csrr t0, xmlenb
+ slli t1, t0, 3
+ add sp, sp, t1
+#if __riscv_xlen == 64
+ addi sp, sp, 24
+#else
+ addi sp, sp, 12
+#endif
+2:
+#endif /* CONFIG_CHECK_MATRIX_DIRTY */
+#endif /* __riscv_matrix || __riscv_xtheadmatrix */
+.endm
+
+.macro RESTORE_SYS_GP
+ .option push
+ .option norelax
+ la gp, __global_pointer$
+ .option pop
+.endm
+
+#endif /* __RISCV_ASM_MACRO_H__ */
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_csr.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_csr.h
new file mode 100644
index 000000000..22e36ab42
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/asm/riscv_csr.h
@@ -0,0 +1,191 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * attention: don't modify this file as a suggest
+ * you should copy from chip_riscv_dummy/include/asm/riscv_csr.h and keep it newer
+ * please contact xuantie-rtos os team if have question
+ */
+
+#ifndef __RISCV_CSR_H__
+#define __RISCV_CSR_H__
+
+#if __riscv_xlen == 64
+ #define store_x sd
+ #define load_x ld
+ #define portWORD_SIZE 8
+#elif __riscv_xlen == 32
+ #define store_x sw
+ #define load_x lw
+ #define portWORD_SIZE 4
+#else
+ #error Assembler did not define __riscv_xlen
+#endif
+
+#if __riscv_flen == 64
+ #define fstore_x fsd
+ #define fload_x fld
+ #define portFPU_REG_SIZE 8
+#elif __riscv_flen == 32
+ #define fstore_x fsw
+ #define fload_x flw
+ #define portFPU_REG_SIZE 4
+#endif
+
+#if CONFIG_RISCV_SMODE
+#define MODE_PREFIX(suffix) s##suffix
+#else
+#define MODE_PREFIX(suffix) m##suffix
+#endif
+
+/* Status register flags */
+#define SR_SIE 0x00000002UL /* Supervisor Interrupt Enable */
+#define SR_MIE 0x00000008UL /* Machine Interrupt Enable */
+#define SR_SPIE 0x00000020UL /* Previous Supervisor IE */
+#define SR_MPIE 0x00000080UL /* Previous Machine IE */
+#define SR_SPP_U 0x00000000UL /* Previously User mode */
+#define SR_SPP_S 0x00000100UL /* Previously Supervisor mode */
+#define SR_MPP_U 0x00000000UL /* Previously User mode */
+#define SR_MPP_S 0x00000800UL /* Previously Supervisor mode */
+#define SR_MPP_M 0x00001800UL /* Previously Machine mode */
+#define SR_SUM 0x00040000UL /* Supervisor User Memory Access */
+
+#define SR_FS 0x00006000UL /* Floating-point Status */
+#define SR_FS_OFF 0x00000000UL
+#define SR_FS_INITIAL 0x00002000UL
+#define SR_FS_CLEAN 0x00004000UL
+#define SR_FS_DIRTY 0x00006000UL
+
+#if CONFIG_CPU_XUANTIE_C906 || CONFIG_CPU_XUANTIE_C906FD || CONFIG_CPU_XUANTIE_C906FDV \
+ || CONFIG_CPU_XUANTIE_R920 \
+ || CONFIG_CPU_XUANTIE_C920
+#define SR_VS 0x01800000
+#define SR_VS_OFF 0x00000000
+#define SR_VS_INITIAL 0x00800000
+#define SR_VS_CLEAN 0x01000000
+#define SR_VS_DIRTY 0x01800000
+#else
+#define SR_VS 0x00000600
+#define SR_VS_OFF 0x00000000
+#define SR_VS_INITIAL 0x00000200
+#define SR_VS_CLEAN 0x00000400
+#define SR_VS_DIRTY 0x00000600
+#endif
+
+#if __riscv_matrix || __riscv_xtheadmatrix
+#define SR_MS 0x06000000
+#define SR_MS_OFF 0x00000000
+#define SR_MS_INITIAL 0x02000000
+#define SR_MS_CLEAN 0x04000000
+#define SR_MS_DIRTY 0x06000000
+#endif
+
+/* Interrupt-enable Registers */
+#define IE_MTIE 0x00000080UL
+#define IE_MEIE 0x00000800UL
+
+/* ===== Trap/Exception Causes ===== */
+#define CAUSE_MISALIGNED_FETCH 0x0
+#define CAUSE_FETCH_ACCESS 0x1
+#define CAUSE_ILLEGAL_INSTRUCTION 0x2
+#define CAUSE_BREAKPOINT 0x3
+#define CAUSE_MISALIGNED_LOAD 0x4
+#define CAUSE_LOAD_ACCESS 0x5
+#define CAUSE_MISALIGNED_STORE 0x6
+#define CAUSE_STORE_ACCESS 0x7
+#define CAUSE_USER_ECALL 0x8
+#define CAUSE_SUPERVISOR_ECALL 0x9
+#define CAUSE_VIRTUAL_SUPERVISOR_ECALL 0xa
+#define CAUSE_MACHINE_ECALL 0xb
+#define CAUSE_FETCH_PAGE_FAULT 0xc
+#define CAUSE_LOAD_PAGE_FAULT 0xd
+#define CAUSE_STORE_PAGE_FAULT 0xf
+
+#define PRV_U 0
+#define PRV_S 1
+#define PRV_M 3
+
+
+#define MSTATUS_SIE 0x00000002
+#define MSTATUS_MIE 0x00000008
+#define MSTATUS_SPIE_SHIFT 5
+#define MSTATUS_SPIE (1 << MSTATUS_SPIE_SHIFT)
+#define MSTATUS_UBE 0x00000040
+#define MSTATUS_MPIE 0x00000080
+#define MSTATUS_SPP_SHIFT 8
+#define MSTATUS_SPP (1 << MSTATUS_SPP_SHIFT)
+#define MSTATUS_MPP_SHIFT 11
+#define MSTATUS_MPP (3 << MSTATUS_MPP_SHIFT)
+
+#if CONFIG_CPU_XUANTIE_C906 || CONFIG_CPU_XUANTIE_C906FD || CONFIG_CPU_XUANTIE_C906FDV \
+ || CONFIG_CPU_XUANTIE_R910 || CONFIG_CPU_XUANTIE_R920 \
+ || CONFIG_CPU_XUANTIE_C910 || CONFIG_CPU_XUANTIE_C920
+#define MSTATUS_VS_SHIFT 23
+#else
+#define MSTATUS_VS_SHIFT 9
+#endif
+#define MSTATUS_FS_SHIFT 13
+#define MSTATUS_MS_SHIFT 25
+
+#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))
+
+#if CONFIG_CPU_XUANTIE_C906 || CONFIG_CPU_XUANTIE_C906FD || CONFIG_CPU_XUANTIE_C906FDV \
+ || CONFIG_CPU_XUANTIE_C908 || CONFIG_CPU_XUANTIE_C908V || CONFIG_CPU_XUANTIE_C908I \
+ || CONFIG_CPU_XUANTIE_C908_V2 || CONFIG_CPU_XUANTIE_C908V_V2 || CONFIG_CPU_XUANTIE_C908I_V2 \
+ || CONFIG_CPU_XUANTIE_C908_CP_V2 || CONFIG_CPU_XUANTIE_C908V_CP_V2 || CONFIG_CPU_XUANTIE_C908I_CP_V2 \
+ || CONFIG_CPU_XUANTIE_C908_CP_XT_V2 || CONFIG_CPU_XUANTIE_C908V_CP_XT_V2 || CONFIG_CPU_XUANTIE_C908I_CP_XT_V2 \
+ || CONFIG_CPU_XUANTIE_C908VK_CP_V2 || CONFIG_CPU_XUANTIE_C908VK_CP_XT_V2 \
+ || CONFIG_CPU_XUANTIE_R910 || CONFIG_CPU_XUANTIE_R920 \
+ || CONFIG_CPU_XUANTIE_C910 || CONFIG_CPU_XUANTIE_C920 \
+ || CONFIG_CPU_XUANTIE_XT_C930_CP || CONFIG_CPU_XUANTIE_XT_C930V_CP
+#define ATTR_SO (1ull << 4)
+#define ATTR_CA (1ull << 3)
+#define ATTR_BU (1ull << 2)
+#define ATTR_SH (1ull << 1)
+#define ATTR_SE (1ull << 0)
+
+#define UPPER_ATTRS_SHIFT (59)
+#define UPPER_ATTRS(x) (((x) & 0x1f) << UPPER_ATTRS_SHIFT)
+#else
+#if __riscv_xlen == 32
+#define PTE_PBMT_SHIFT (30)
+#else
+#define PTE_PBMT_SHIFT (61)
+#endif /* end __riscv_xlen */
+#define SVPBMT_PMA ((unsigned long)0x0 << PTE_PBMT_SHIFT)
+#define SVPBMT_NC ((unsigned long)0x1 << PTE_PBMT_SHIFT)
+#define SVPBMT_IO ((unsigned long)0x2 << PTE_PBMT_SHIFT)
+#define SVPBMT_MASK ((unsigned long)0x3 << PTE_PBMT_SHIFT)
+
+#endif
+
+#define DIRTY_FLAG (1 << 6)
+#define ACCESS_FLAG (1 << 5)
+#define GLOBAL_FLAG (1 << 4)
+#define AP_UNPRIV (1 << 3)
+#define AP_X (1 << 2)
+#define AP_W (1 << 1)
+#define AP_R (1 << 0)
+
+#define LOWER_ATTRS_SHIFT 1
+#define LOWER_ATTRS(x) (((x) & 0x1ff) << LOWER_ATTRS_SHIFT)
+
+
+
+#endif /* __RISCV_CSR_H__ */
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/drv/dev_tag.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/drv/dev_tag.h
new file mode 100644
index 000000000..4e7590c4b
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/drv/dev_tag.h
@@ -0,0 +1,104 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file drv/dev_tag.h
+ * @brief Header File for DEV TAG Driver
+ * @version V1.0
+ * @date 31. March 2020
+ * @model common
+ ******************************************************************************/
+
+#ifndef _DRV_DEV_TAG_H_
+#define _DRV_DEV_TAG_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ DEV_BLANK_TAG = 0U,
+ DEV_DW_UART_TAG,
+ DEV_DW_AHB_DMA_TAG,
+ DEV_DW_AXI_DMA_TAG,
+ DEV_DW_GPIO_TAG,
+ DEV_DW_IIC_TAG,
+ DEV_DW_QSPI_TAG,
+ DEV_DW_SDMMC_TAG,
+ DEV_DW_SDHCI_TAG,
+ DEV_DW_SPI_TAG,
+ DEV_DW_TIMER_TAG,
+ DEV_DW_WDT_TAG,
+ DEV_WJ_ADC_TAG,
+ DEV_WJ_AES_TAG,
+ DEV_WJ_CODEC_TAG,
+ DEV_WJ_CRC_TAG,
+ DEV_WJ_DMA_TAG,
+ DEV_WJ_EFLASH_TAG,
+ DEV_WJ_EFUSE_TAG,
+ DEV_WJ_ETB_TAG,
+ DEV_WJ_FFT_TAG,
+ DEV_WJ_I2S_TAG,
+ DEV_WJ_MBOX_TAG,
+ DEV_WJ_PADREG_TAG,
+ DEV_WJ_PDM_TAG,
+ DEV_WJ_PINMUX_TAG,
+ DEV_WJ_PMU_TAG,
+ DEV_WJ_PWM_TAG,
+ DEV_WJ_RNG_TAG,
+ DEV_WJ_ROM_TAG,
+ DEV_WJ_RSA_TAG,
+ DEV_WJ_RTC_TAG,
+ DEV_WJ_SASC_TAG,
+ DEV_WJ_SHA_TAG,
+ DEV_WJ_SPDIF_TAG,
+ DEV_WJ_SPIDF_TAG,
+ DEV_WJ_TDM_TAG,
+ DEV_WJ_TIPC_TAG,
+ DEV_WJ_USB_TAG,
+ DEV_WJ_USI_TAG,
+ DEV_WJ_VAD_TAG,
+ DEV_CD_QSPI_TAG,
+ DEV_DCD_ISO7816_TAG,
+ DEV_OSR_RNG_TAG,
+ DEV_QX_RTC_TAG,
+ DEV_RCHBAND_CODEC_TAG,
+ DEV_CMSDK_UART_TAG,
+ DEV_RAMBUS_150B_PKA_TAG,
+ DEV_RAMBUS_150B_TRNG_TAG,
+ DEV_RAMBUS_120SI_TAG,
+ DEV_RAMBUS_120SII_TAG,
+ DEV_RAMBUS_120SIII_TAG,
+ DEV_WJ_AVFS_TAG,
+ DEV_WJ_BMU_TAG,
+ DEV_XT_IOPMP_TAG,
+} csi_dev_tag_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DRV_TAG_H_ */
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_timer_ll.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_timer_ll.h
new file mode 100644
index 000000000..cb7bf1083
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_timer_ll.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ */
+
+/*******************************************************
+ * @file dw_timer_ll.h
+ * @brief header file for timer ll driver
+ * @version V1.0
+ * @date 9. April 2020
+ * ******************************************************/
+
+#ifndef _DW_TIMER_LL_H_
+#define _DW_TIMER_LL_H_
+
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*! Timer1 Control Reg, offset: 0x08 */
+#define DW_TIMER_CTL_ENABLE_SEL_Pos (0U)
+#define DW_TIMER_CTL_ENABLE_SEL_Msk (0x1U << DW_TIMER_CTL_ENABLE_SEL_Pos)
+#define DW_TIMER_CTL_ENABLE_SEL_EN DW_TIMER_CTL_ENABLE_SEL_Msk
+
+#define DW_TIMER_CTL_MODE_SEL_Pos (1U)
+#define DW_TIMER_CTL_MODE_SEL_Msk (0x1U << DW_TIMER_CTL_MODE_SEL_Pos)
+#define DW_TIMER_CTL_MODE_SEL_EN DW_TIMER_CTL_MODE_SEL_Msk
+
+#define DW_TIMER_CTL_INT_MASK_Pos (2U)
+#define DW_TIMER_CTL_INT_MASK_Msk (0x1U << DW_TIMER_CTL_INT_MASK_Pos)
+#define DW_TIMER_CTL_INT_MAKS_EN DW_TIMER_CTL_INT_MASK_Msk
+
+#define DW_TIMER_CTL_HARD_TRIG_Pos (4U)
+#define DW_TIMER_CTL_HARD_TRIG_Msk (0x1U << DW_TIMER_CTL_HARD_TRIG_Pos)
+#define DW_TIMER_CTL_HARD_TRIG_EN DW_TIMER_CTL_HARD_TRIG_Msk
+
+/*! Timer EOI, offset: 0x0c */
+#define DW_TIMER_EOI_REG_Pos (0U)
+#define DW_TIMER_EOI_REG_Msk (0x1U << DW_TIMER_EOI_REG_Pos)
+#define DW_TIMER_EOI_REG_EN DW_TIMER_EOI_REG_Msk
+
+/*! Timer Int Status, offset: 0x10 */
+#define DW_TIMER_INT_STATUS_Pos (0U)
+#define DW_TIMER_INT_STATUS_Msk (0x1U << DW_TIMER_INT_STATUS_Pos)
+#define DW_TIMER_INT_STATUS_EN DW_TIMER_INT_STATUS_Msk
+
+/*! Timers Int Status, offset: 0xa0 */
+#define DW_TIMERS_INT_STATUS_Pos (0U)
+#define DW_TIMERS_INT_STATUS_Msk (0x2U << DW_TIMERS_INT_STATUS_Pos)
+#define DW_TIMERS_INT_STATUS_EN DW_TIMERS_INT_STATUS_Msk
+
+/*! Timers EOI, offset: 0xa4 */
+#define DW_TIMERS_EOI_REG_Pos (0U)
+#define DW_TIMERS_EOI_REG_Msk (0x2U << DW_TIMERS_EOI_REG_Pos)
+#define DW_TIMERS_EOI_REG_EN DW_TIMERS_EOI_REG_Msk
+
+/*! Timers Raw Int Status,offset: 0xa8 */
+#define DW_TIMERS_RAW_INT_STA_Pos (0U)
+#define DW_TIMERS_RAW_INT_STA_Msk (0x2U << DW_TIMERS_RAW_INT_STA_Pos)
+#define DW_TIMERS_RAW_INT_STA_EN DW_TIMERS_RAW_INT_STA_Msk
+
+typedef struct {
+ __IOM uint32_t TLC; /* Offset: 0x000 (R/W) TimerLoadCount */
+ __IM uint32_t TCV; /* Offset: 0x004 (R/ ) TimerCurrentValue */
+ __IOM uint32_t TCR; /* Offset: 0x008 (R/W) TimerControlReg */
+ __IM uint32_t TEOI; /* Offset: 0x00c (R/ ) TimerEOI */
+ __IM uint32_t TIS; /* Offset: 0x010 (R/ ) TimerIntStatus */
+} dw_timer_regs_t;
+
+typedef struct {
+ dw_timer_regs_t timer[8];
+ __IM uint32_t TSIS; /* Offset: 0x0a0 (R/ ) TimersIntStatus */
+ __IM uint32_t TSEOI; /* Offset: 0x0a4 (R/ ) TimersEOI */
+ __IM uint32_t TSRIS; /* Offset: 0x0a8 (R/ ) TimersRawIntStatus */
+} dw_timer_general_regs_t;
+
+static inline uint32_t dw_timer_read_load(dw_timer_regs_t *timer_base)
+{
+ return (timer_base->TLC);
+}
+static inline void dw_timer_write_load(dw_timer_regs_t *timer_base, uint32_t value)
+{
+ timer_base->TLC = value;
+}
+static inline uint32_t dw_timer_get_current(dw_timer_regs_t *timer_base)
+{
+ return (timer_base->TCV);
+}
+static inline void dw_timer_set_enable(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR |= (DW_TIMER_CTL_ENABLE_SEL_EN);
+}
+static inline void dw_timer_set_disable(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR &= ~(DW_TIMER_CTL_ENABLE_SEL_EN);
+}
+static inline uint32_t dw_timer_get_enable(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TCR) & DW_TIMER_CTL_ENABLE_SEL_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline void dw_timer_set_mode_free(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR &= ~(DW_TIMER_CTL_MODE_SEL_EN);
+}
+static inline void dw_timer_set_mode_load(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR |= (DW_TIMER_CTL_MODE_SEL_EN);
+}
+static inline uint32_t dw_timer_get_model(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TCR) & DW_TIMER_CTL_MODE_SEL_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline void dw_timer_set_mask(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR |= (DW_TIMER_CTL_INT_MAKS_EN);
+}
+static inline void dw_timer_set_unmask(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR &= ~(DW_TIMER_CTL_INT_MAKS_EN);
+}
+static inline uint32_t dw_timer_get_mask(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TCR) & DW_TIMER_CTL_INT_MAKS_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline void dw_timer_set_hardtrigger_en(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR |= (DW_TIMER_CTL_HARD_TRIG_EN);
+}
+static inline void dw_timer_set_hardtrigger_dis(dw_timer_regs_t *timer_base)
+{
+ timer_base->TCR &= ~(DW_TIMER_CTL_HARD_TRIG_EN);
+}
+static inline uint32_t dw_timer_get_hardtrigger(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TCR) & DW_TIMER_CTL_HARD_TRIG_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline uint32_t dw_timer_clear_irq(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TEOI) & DW_TIMER_EOI_REG_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline uint32_t dw_timer_get_int_status(dw_timer_regs_t *timer_base)
+{
+ return (((timer_base->TIS) & DW_TIMER_INT_STATUS_EN) ? (uint32_t)1 : (uint32_t)0);
+}
+static inline uint32_t dw_timer_general_active_after_mask(dw_timer_general_regs_t *timer_base)
+{
+ return ((timer_base->TSIS) & DW_TIMERS_INT_STATUS_EN);
+}
+static inline uint32_t dw_timer_general_clear_irq(dw_timer_general_regs_t *timer_base)
+{
+ return ((timer_base->TSEOI) & DW_TIMERS_EOI_REG_EN);
+}
+static inline uint32_t dw_timer_general_active_prior_mask(dw_timer_general_regs_t *timer_base)
+{
+ return ((timer_base->TSRIS) & DW_TIMERS_RAW_INT_STA_EN);
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DW_TIMER_LL_H_ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_uart.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_uart.h
new file mode 100644
index 000000000..e69de29bb
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_uart_ll.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_uart_ll.h
new file mode 100644
index 000000000..50a7de0b9
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/dw_uart_ll.h
@@ -0,0 +1,423 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file dw_uart_ll.h
+ * @brief header file for uart ll driver
+ * @version V1.0
+ * @date 18. December 2024
+ ******************************************************************************/
+
+#ifndef _DW_UART_LL_H_
+#define _DW_UART_LL_H_
+
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! IER, offset: 0x4 */
+#define DW_UART_IER_ERBFI_Pos (0U)
+#define DW_UART_IER_ERBFI_Msk (0x1U << DW_UART_IER_ERBFI_Pos)
+#define DW_UART_IER_ERBFI_EN DW_UART_IER_ERBFI_Msk
+
+#define DW_UART_IER_ETBEI_Pos (1U)
+#define DW_UART_IER_ETBEI_Msk (0x1U << DW_UART_IER_ETBEI_Pos)
+#define DW_UART_IER_ETBEI_EN DW_UART_IER_ETBEI_Msk
+
+#define DW_UART_IER_ELSI_Pos (2U)
+#define DW_UART_IER_ELSI_Msk (0x1U << DW_UART_IER_ELSI_Pos)
+#define DW_UART_IER_ELSI_EN DW_UART_IER_ELSI_Msk
+
+#define DW_UART_IER_EDSSI_Pos (3U)
+#define DW_UART_IER_EDSSI_Msk (0x1U << DW_UART_IER_EDSSI_Pos)
+#define DW_UART_IER_EDSSI_EN DW_UART_IER_EDSSI_Msk
+
+/*! IIR, offset: 0x8 */
+#define DW_UART_IIR_IID_Pos (0U)
+#define DW_UART_IIR_IID_Msk (0xFU << DW_UART_IIR_IID_Pos)
+#define DW_UART_IIR_IID_MODEM_STATUS (0x0U)
+#define DW_UART_IIR_IID_NO_INTERRUPT (0x1U)
+#define DW_UART_IIR_IID_THR_EMPTY (0x2U)
+#define DW_UART_IIR_IID_RECV_DATA_AVAIL (0x4U)
+#define DW_UART_IIR_IID_RECV_LINE_STATUS (0x6U)
+#define DW_UART_IIR_IID_BUSY_DETECT (0x7U)
+#define DW_UART_IIR_IID_CHARACTER_TIMEOUT (0xCU)
+
+#define DW_UART_IIR_FIFOSE_Pos (6U)
+#define DW_UART_IIR_FIFOSE_Msk (0x3U << DW_UART_IIR_FIFOSE_Pos)
+#define DW_UART_IIR_FIFOSE_EN DW_UART_IIR_FIFOSE_Msk
+
+/*! FCR, offset: 0x8 */
+#define DW_UART_FCR_FIFOE_Pos (0U)
+#define DW_UART_FCR_FIFOE_Msk (0x1U << DW_UART_FCR_FIFOE_Pos)
+#define DW_UART_FCR_FIFOE_EN DW_UART_FCR_FIFOE_Msk
+
+#define DW_UART_FCR_RFIFOR_Pos (1U)
+#define DW_UART_FCR_RFIFOR_Msk (0x1U << DW_UART_FCR_RFIFOR_Pos)
+#define DW_UART_FCR_RFIFOR_RESET DW_UART_FCR_RFIFOR_Msk
+
+#define DW_UART_FCR_XFIFOR_Pos (2U)
+#define DW_UART_FCR_XFIFOR_Msk (0x1U << DW_UART_FCR_XFIFOR_Pos)
+#define DW_UART_FCR_XFIFOR_RESET DW_UART_FCR_XFIFOR_Msk
+
+#define DW_UART_FCR_TET_Pos (4U)
+#define DW_UART_FCR_TET_Msk (0x3U << DW_UART_FCR_TET_Pos)
+#define DW_UART_FCR_TET_FIFO_EMTPY (0x0U)
+#define DW_UART_FCR_TET_FIFO_2_CHAR (0x1U << DW_UART_FCR_TET_Pos)
+#define DW_UART_FCR_TET_FIFO_1_4_FULL (0x2U << DW_UART_FCR_TET_Pos)
+#define DW_UART_FCR_TET_FIFO_1_2_FULL (0x3U << DW_UART_FCR_TET_Pos)
+
+#define DW_UART_FCR_RT_Pos (6U)
+#define DW_UART_FCR_RT_Msk (0x3U << DW_UART_FCR_RT_Pos)
+#define DW_UART_FCR_RT_FIFO_1_CHAR (0x0U)
+#define DW_UART_FCR_RT_FIFO_1_4_FULL (0x1U << DW_UART_FCR_RT_Pos)
+#define DW_UART_FCR_RT_FIFO_1_2_FULL (0x2U << DW_UART_FCR_RT_Pos)
+#define DW_UART_FCR_RT_FIFO_2_LESS_FULL (0x3U << DW_UART_FCR_RT_Pos)
+
+/*! LCR, offset: 0xC */
+#define DW_UART_LCR_DLS_Pos (0U)
+#define DW_UART_LCR_DLS_Msk (0x3U << DW_UART_LCR_DLS_Pos)
+#define DW_UART_LCR_DLS_5_BITS (0x0U)
+#define DW_UART_LCR_DLS_6_BITS (0x1U << DW_UART_LCR_DLS_Pos)
+#define DW_UART_LCR_DLS_7_BITS (0x2U << DW_UART_LCR_DLS_Pos)
+#define DW_UART_LCR_DLS_8_BITS (0x3U << DW_UART_LCR_DLS_Pos)
+
+#define DW_UART_LCR_STOP_Pos (2U)
+#define DW_UART_LCR_STOP_Msk (0x1U << DW_UART_LCR_STOP_Pos)
+#define DW_UART_LCR_STOP_1_BIT (0x0U)
+#define DW_UART_LCR_STOP_2_BIT (0x1U << DW_UART_LCR_STOP_Pos)
+
+#define DW_UART_LCR_PEN_Pos (3U)
+#define DW_UART_LCR_PEN_Msk (0x1U << DW_UART_LCR_PEN_Pos)
+#define DW_UART_LCR_PEN_EN DW_UART_LCR_PEN_Msk
+
+#define DW_UART_LCR_EPS_Pos (4U)
+#define DW_UART_LCR_EPS_Msk (0x1U << DW_UART_LCR_EPS_Pos)
+#define DW_UART_LCR_EPS_EN DW_UART_LCR_EPS_Msk
+
+#define DW_UART_LCR_BC_Pos (6U)
+#define DW_UART_LCR_BC_Msk (0x1U << DW_UART_LCR_BC_Pos)
+#define DW_UART_LCR_BC_EN DW_UART_LCR_BC_Msk
+
+#define DW_UART_LCR_DLAB_Pos (7U)
+#define DW_UART_LCR_DLAB_Msk (0x1U << DW_UART_LCR_DLAB_Pos)
+#define DW_UART_LCR_DLAB_EN DW_UART_LCR_DLAB_Msk
+
+/*! MCR, offset: 0x10 */
+#define DW_UART_MCR_RTS_Pos (1U)
+#define DW_UART_MCR_RTS_Msk (0x1U << DW_UART_MCR_RTS_Pos)
+#define DW_UART_MCR_RTS_EN DW_UART_MCR_RTS_Msk
+
+#define DW_UART_MCR_LB_Pos (4U)
+#define DW_UART_MCR_LB_Msk (0x1U << DW_UART_MCR_LB_Pos)
+#define DW_UART_MCR_LB_EN DW_UART_MCR_LB_Msk
+
+#define DW_UART_MCR_AFCE_Pos (5U)
+#define DW_UART_MCR_AFCE_Msk (0x1U << DW_UART_MCR_AFCE_Pos)
+#define DW_UART_MCR_AFCE_EN DW_UART_MCR_AFCE_Msk
+
+/*! LSR, offset: 0x14 */
+#define DW_UART_LSR_DR_Pos (0U)
+#define DW_UART_LSR_DR_Msk (0x1U << DW_UART_LSR_DR_Pos)
+#define DW_UART_LSR_DR_READY DW_UART_LSR_DR_Msk
+
+#define DW_UART_LSR_OE_Pos (1U)
+#define DW_UART_LSR_OE_Msk (0x1U << DW_UART_LSR_OE_Pos)
+#define DW_UART_LSR_OE_ERROR DW_UART_LSR_OE_Msk
+
+#define DW_UART_LSR_PE_Pos (2U)
+#define DW_UART_LSR_PE_Msk (0x1U << DW_UART_LSR_PE_Pos)
+#define DW_UART_LSR_PE_ERROR DW_UART_LSR_PE_Msk
+
+#define DW_UART_LSR_FE_Pos (3U)
+#define DW_UART_LSR_FE_Msk (0x1U << DW_UART_LSR_FE_Pos)
+#define DW_UART_LSR_FE_ERROR DW_UART_LSR_FE_Msk
+
+#define DW_UART_LSR_BI_Pos (4U)
+#define DW_UART_LSR_BI_Msk (0x1U << DW_UART_LSR_BI_Pos)
+#define DW_UART_LSR_BI_SET DW_UART_LSR_BI_Msk
+
+#define DW_UART_LSR_THRE_Pos (5U)
+#define DW_UART_LSR_THRE_Msk (0x1U << DW_UART_LSR_THRE_Pos)
+#define DW_UART_LSR_THRE_SET DW_UART_LSR_THRE_Msk
+
+#define DW_UART_LSR_TEMT_Pos (6U)
+#define DW_UART_LSR_TEMT_Msk (0x1U << DW_UART_LSR_TEMT_Pos)
+#define DW_UART_LSR_TEMT_SET DW_UART_LSR_TEMT_Msk
+
+#define DW_UART_LSR_RFE_Pos (7U)
+#define DW_UART_LSR_RFE_Msk (0x1U << DW_UART_LSR_RFE_Pos)
+#define DW_UART_LSR_RFE_ERROR DW_UART_LSR_RFE_Msk
+
+/*! MSR, offset: 0x18 */
+#define DW_UART_MSR_DCTS_Pos (0U)
+#define DW_UART_MSR_DCTS_Msk (0x1U << DW_UART_MSR_DCTS_Pos)
+#define DW_UART_MSR_DCTS_CHANGE DW_UART_MSR_DCTS_Msk
+
+#define DW_UART_MSR_DDSR_Pos (1U)
+#define DW_UART_MSR_DDSR_Msk (0x1U << DW_UART_MSR_DDSR_Pos)
+#define DW_UART_MSR_DDSR_CHANGE DW_UART_MSR_DDSR_Msk
+
+#define DW_UART_MSR_TERI_Pos (2U)
+#define DW_UART_MSR_TERI_Msk (0x1U << DW_UART_MSR_TERI_Pos)
+#define DW_UART_MSR_TERI_CHANGE DW_UART_MSR_TERI_Msk
+
+#define DW_UART_MSR_DDCD_Pos (3U)
+#define DW_UART_MSR_DDCD_Msk (0x1U << DW_UART_MSR_DDCD_Pos)
+#define DW_UART_MSR_DDCD_CHANGE DW_UART_MSR_DDCD_Msk
+
+#define DW_UART_MSR_CTS_Pos (4U)
+#define DW_UART_MSR_CTS_Msk (0x1U << DW_UART_MSR_CTS_Pos)
+#define DW_UART_MSR_CTS_ASSERTED DW_UART_MSR_CTS_Msk
+
+#define DW_UART_MSR_DSR_Pos (5U)
+#define DW_UART_MSR_DSR_Msk (0x1U << DW_UART_MSR_DSR_Pos)
+#define DW_UART_MSR_DSR_ASSERTED DW_UART_MSR_DSR_Msk
+
+#define DW_UART_MSR_RI_Pos (6U)
+#define DW_UART_MSR_RI_Msk (0x1U << DW_UART_MSR_RI_Pos)
+#define DW_UART_MSR_RI_ASSERTED DW_UART_MSR_RI_Msk
+
+#define DW_UART_MSR_DCD_Pos (7U)
+#define DW_UART_MSR_DCD_Msk (0x1U << DW_UART_MSR_DCD_Pos)
+#define DW_UART_MSR_DCD_ASSERTED DW_UART_MSR_DCD_Msk
+
+/*! SCR, offset: 0x1C */
+#define DW_UART_SCR_SCRATCHPAD_Pos (0U)
+#define DW_UART_SCR_SCRATCHPAD_Msk (0xFFU << DW_UART_SCR_SCRATCHPAD_Pos)
+
+/*! USR, offset: 0x7C */
+#define DW_UART_USR_BUSY_Pos (0U)
+#define DW_UART_USR_BUSY_Msk (0x1U << DW_UART_USR_BUSY_Pos)
+#define DW_UART_USR_BUSY_SET DW_UART_USR_BUSY_Msk
+
+#define DW_UART_USR_TFNF_Pos (1U)
+#define DW_UART_USR_TFNF_Msk (0x1U << DW_UART_USR_TFNF_Pos)
+#define DW_UART_USR_TFNF_SET DW_UART_USR_TFNF_Msk
+
+#define DW_UART_USR_TFE_Pos (2U)
+#define DW_UART_USR_TFE_Msk (0x1U << DW_UART_USR_TFE_Pos)
+#define DW_UART_USR_TFE_SET DW_UART_USR_TFE_Msk
+
+#define DW_UART_USR_RFNE_Pos (3U)
+#define DW_UART_USR_RFNE_Msk (0x1U << DW_UART_USR_RFNE_Pos)
+#define DW_UART_USR_RFNE_SET DW_UART_USR_RFNE_Msk
+
+#define DW_UART_USR_RFF_Pos (4U)
+#define DW_UART_USR_RFF_Msk (0x1U << DW_UART_USR_RFF_Pos)
+#define DW_UART_USR_RFF_SET DW_UART_USR_RFF_Msk
+
+/*! TFL, offset: 0x80 */
+#define DW_UART_TFL_TFIFOL_Pos (0U)
+#define DW_UART_TFL_TFIFOL_Msk (0x1FU << DW_UART_TFL_TFIFOL_Pos)
+#define DW_UART_TFL_TFIFOL(n) (nU << DW_UART_TFL_TFIFOL_Pos)
+
+/*! RFL, offset: 0x84 */
+#define DW_UART_RFL_RFIFOL_Pos (0U)
+#define DW_UART_RFL_RFIFOL_Msk (0x1FU << DW_UART_RFL_RFIFOL_Pos)
+#define DW_UART_RFL_RFIFOL(n) (nU << DW_UART_TFL_TFIFOL_Pos)
+
+/*! HTX, offset: 0xA4 */
+#define DW_UART_HTX_HALTTX_Pos (0U)
+#define DW_UART_HTX_HALTTX_Msk (0x1U << DW_UART_HTX_HALTTX_Pos)
+#define DW_UART_HTX_HALTTX_EN DW_UART_HTX_HALTTX_Msk
+
+#define DW_UART_HTX_RX_ETB_FUNC_Pos (6U)
+#define DW_UART_HTX_RX_ETB_FUNC_Msk (0x1U << DW_UART_HTX_RX_ETB_FUNC_Pos)
+#define DW_UART_HTX_RX_ETB_FUNC_EN DW_UART_HTX_RX_ETB_FUNC_Msk
+
+#define DW_UART_HTX_TX_ETB_FUNC_Pos (7U)
+#define DW_UART_HTX_TX_ETB_FUNC_Msk (0x1U << DW_UART_HTX_TX_ETB_FUNC_Pos)
+#define DW_UART_HTX_TX_ETB_FUNC_EN DW_UART_HTX_TX_ETB_FUNC_Msk
+
+/*! DMASA, offset: 0xA8 */
+#define DW_UART_DMASA_DMASACK_Pos (0U)
+#define DW_UART_DMASA_DMASACK_Msk (0x1U << DW_UART_DMASA_DMASACK_Pos)
+#define DW_UART_DMASA_DMASACK_SET DW_UART_DMASA_DMASACK_Msk
+
+/* FIFO CONFIG */
+#define UART_FIFO_INIT_CONFIG (DW_UART_FCR_FIFOE_EN | DW_UART_FCR_RT_FIFO_1_2_FULL|DW_UART_FCR_RFIFOR_RESET|DW_UART_FCR_XFIFOR_RESET)
+
+/*! UART_RATE, offset: 0x3FC */
+#define DW_UART_SUPPORT_RATE 0x10102U
+
+#define UART_BUSY_TIMEOUT 0x70000000U
+
+typedef struct {
+ union {
+ __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */
+ __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */
+ __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */
+ };
+ union {
+ __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */
+ __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */
+ };
+ union {
+ __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt identification register */
+ __OM uint32_t FCR; /* Offset: 0x008 ( /W) FIFO control register */
+ };
+ __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Line control register */
+ __IOM uint32_t MCR; /* Offset: 0x010 (R/W) Modem control register */
+ __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Line state register */
+ __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */
+ uint32_t RESERVED1[21];
+ __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */
+} dw_uart_regs_t;
+
+static inline void dw_uart_enable_recv_irq(dw_uart_regs_t *uart_base)
+{
+ uart_base->IER |= (DW_UART_IER_ERBFI_EN | DW_UART_IER_ELSI_EN);
+}
+
+static inline void dw_uart_disable_recv_irq(dw_uart_regs_t *uart_base)
+{
+ uart_base->IER &= ~(DW_UART_IER_ERBFI_EN | DW_UART_IER_ELSI_EN);
+}
+
+static inline void dw_uart_enable_trans_irq(dw_uart_regs_t *uart_base)
+{
+ uart_base->IER |= DW_UART_IER_ETBEI_EN;
+}
+
+static inline void dw_uart_disable_trans_irq(dw_uart_regs_t *uart_base)
+{
+ uart_base->IER &= ~(DW_UART_IER_ETBEI_EN);
+}
+
+static inline void dw_uart_fifo_init(dw_uart_regs_t *uart_base)
+{
+ /* FIFO enable */
+ uart_base->FCR = UART_FIFO_INIT_CONFIG;
+}
+
+static inline void dw_uart_fifo_enable(dw_uart_regs_t *uart_base)
+{
+ uart_base->FCR |= DW_UART_FCR_FIFOE_EN;
+}
+
+static inline void dw_uart_fifo_disable(dw_uart_regs_t *uart_base)
+{
+ uart_base->FCR &= ~(DW_UART_FCR_FIFOE_EN);
+}
+
+static inline uint32_t dw_uart_putready(dw_uart_regs_t *uart_base)
+{
+ uint32_t status = 0U, ret = 0U;
+
+ status = uart_base->LSR & DW_UART_LSR_THRE_SET;
+
+ if (status != 0U) {
+ ret = 1U;
+ }
+
+ return ret;
+}
+
+static inline uint32_t dw_uart_getready(dw_uart_regs_t *uart_base)
+{
+ uint32_t status = 0U, ret = 0U;
+
+ status = uart_base->LSR & DW_UART_LSR_DR_READY;
+
+ if (status != 0U) {
+ ret = 1U;
+ }
+
+ return ret;
+}
+
+static inline uint32_t dw_uart_get_line_status(dw_uart_regs_t *uart_base)
+{
+ return uart_base->LSR;
+}
+
+static inline void dw_uart_config_stop_bits_1(dw_uart_regs_t *uart_base)
+{
+ uart_base->LCR &= ~(DW_UART_LCR_STOP_Msk);
+}
+
+static inline void dw_uart_config_stop_bits_2(dw_uart_regs_t *uart_base)
+{
+ uart_base->LCR |= DW_UART_LCR_STOP_2_BIT;
+}
+
+static inline void dw_uart_putchar(dw_uart_regs_t *uart_base, uint8_t ch)
+{
+ uart_base->THR = ch;
+}
+
+static inline uint8_t dw_uart_getchar(dw_uart_regs_t *uart_base)
+{
+ return (uint8_t)(uart_base->RBR);
+}
+
+static inline uint32_t dw_uart_get_intr_en_status(dw_uart_regs_t *uart_base)
+{
+ return uart_base->IER;
+}
+
+static inline void dw_uart_set_intr_en_status(dw_uart_regs_t *uart_base, uint32_t status)
+{
+ uart_base->IER = status;
+}
+
+static inline void dw_uart_set_fcr_reg(dw_uart_regs_t *uart_base, uint32_t value)
+{
+ uart_base->FCR = value;
+}
+
+static inline void dw_uart_enable_auto_flow_control(dw_uart_regs_t *uart_base)
+{
+ uart_base->MCR |= DW_UART_MCR_AFCE_EN;
+ uart_base->MCR |= DW_UART_MCR_RTS_EN;
+}
+
+static inline void dw_uart_disable_auto_flow_control(dw_uart_regs_t *uart_base)
+{
+ uart_base->MCR &= ~DW_UART_MCR_AFCE_EN;
+ uart_base->MCR &= ~DW_UART_MCR_RTS_EN;
+}
+
+int32_t dw_uart_wait_timeout(dw_uart_regs_t *uart_base);
+
+int32_t dw_uart_wait_idle(dw_uart_regs_t *uart_base);
+
+int32_t dw_uart_config_baudrate(dw_uart_regs_t *uart_base, uint32_t baud, uint32_t uart_freq);
+
+int32_t dw_uart_config_stop_bits(dw_uart_regs_t *uart_base, uint32_t stop_bits);
+
+int32_t dw_uart_config_parity_none(dw_uart_regs_t *uart_base);
+
+int32_t dw_uart_config_parity_odd(dw_uart_regs_t *uart_base);
+
+int32_t dw_uart_config_parity_even(dw_uart_regs_t *uart_base);
+
+int32_t dw_uart_config_data_bits(dw_uart_regs_t *uart_base, uint32_t data_bits);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DW_UART_LL_H_ */
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/soc.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/soc.h
new file mode 100644
index 000000000..e77cb3057
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/soc.h
@@ -0,0 +1,409 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _SOC_H_
+#define _SOC_H_
+
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef EHS_VALUE
+#define EHS_VALUE 20000000U
+#endif
+
+#ifndef ELS_VALUE
+#define ELS_VALUE 32768U
+#endif
+
+#ifndef IHS_VALUE
+#define IHS_VALUE 20000000U
+#endif
+
+#ifndef ILS_VALUE
+#define ILS_VALUE 32768U
+#endif
+
+#if __riscv_xlen == 32
+#define INVALID_ADDRESS 0xFFFFFFFFU
+#elif __riscv_xlen == 64
+#define INVALID_ADDRESS 0xFFFFFFFFFFFFFFFFULL
+#else
+#error "Unsupported RISC-V XLEN."
+#endif
+
+typedef enum {
+ DW_UART0_RX_DMAN = 0U,
+ DW_UART0_TX_DMAN = 1U,
+ DW_UART1_RX_DMAN = 2U,
+ DW_UART1_TX_DMAN = 3U,
+ MEMORY_DMAN = 4U,
+} dman_type_t;
+
+typedef enum {
+ PA0 = 0U,
+ PA1,
+ PA2,
+ PA3,
+ PA4,
+ PA5,
+ PA6,
+ PA7,
+ PA8,
+ PA9,
+ PA10,
+ PA11,
+ PA12,
+ PA13,
+ PA14,
+ PA15,
+ PA16,
+ PA17,
+ PA18,
+ PA19,
+ PA20,
+ PA21,
+ PA22,
+ PA23,
+ PA24,
+ PA25,
+ PA26,
+ PA27,
+ PA28,
+ PA29,
+ PA30,
+ PA31,
+ PIN_END = 0xFFFFFFFFU
+} pin_name_t;
+
+
+typedef enum {
+ PA0_I2S0_SCLK = 0U,
+ PA0_SPI0_CS = 1U,
+ PA0_UART0_RX = 2U,
+ PA0_PWM_CH0 = 3U,
+ PA1_I2S0_WSCLK = 0U,
+ PA1_SPI0_SCK = 1U,
+ PA1_UART0_TX = 2U,
+ PA1_PWM_CH1 = 3U,
+ PA2_I2S1_SCLK = 0U,
+ PA2_IIC0_SCL = 1U,
+ PA2_SPI1_CS = 2U,
+ PA2_PWM_CH2 = 3U,
+ PA2_ADC_A0 = 7U,
+ PA3_I2S1_WSCLK = 0U,
+ PA3_IIC0_SDA = 1U,
+ PA3_SPI1_SCK = 2U,
+ PA3_PWM_CH3 = 3U,
+ PA3_ADC_A1 = 8U,
+ PA4_I2S0_SDA = 0U,
+ PA4_SPI0_MOSI = 1U,
+ PA4_UART1_CTS = 2U,
+ PA4_PWM_CH4 = 3U,
+ PA4_ADC_A2 = 9U,
+ PA5_I2S1_SDA = 0U,
+ PA5_SPI0_MISO = 1U,
+ PA5_UART1_RTS = 2U,
+ PA5_PWM_CH5 = 3U,
+ PA5_ADC_A3 = 10U,
+ PA6_I2S0_SCLK = 0U,
+ PA6_UART0_TX = 1U,
+ PA6_SPI1_MOSI = 2U,
+ PA6_PWM_CH6 = 3U,
+ PA6_ADC_A4 = 11U,
+ PA7_I2S0_WSCLK = 0U,
+ PA7_PWMR_OUT = 1U,
+ PA7_SPI1_MISO = 2U,
+ PA7_PWM_CH7 = 3U,
+ PA7_ADC_A5 = 12U,
+ PA8_I2S0_SDA = 0U,
+ PA8_IIC0_SCL = 1U,
+ PA8_UART0_RX = 2U,
+ PA8_PWM_CH8 = 3U,
+ PA8_ADC_A6 = 13U,
+ PA9_I2S1_SDA = 0U,
+ PA9_IIC0_SDA = 1U,
+ PA9_PWMR_OUT = 2U,
+ PA9_PWM_CH9 = 3U,
+ PA9_ADC_A7 = 14U,
+ PA10_I2S0_MCLK = 0U,
+ PA10_UART0_TX = 1U,
+ PA10_SPI1_MOSI = 2U,
+ PA10_SPI1_MISO = 3U,
+ PA10_ADC_A8 = 15U,
+ PA15_IIC0_SCL = 0U,
+ PA15_SPI0_CS = 1U,
+ PA15_PWMR_OUT = 2U,
+ PA15_PWM_CH4 = 3U,
+ PA15_ADC_A9 = 20U,
+ PA16_IIC0_SDA = 0U,
+ PA16_SPI0_SCK = 1U,
+ PA16_UART1_TX = 2U,
+ PA16_PWM_CH5 = 3U,
+ PA16_ADC_A10 = 21U,
+ PA17_UART0_RX = 0U,
+ PA17_SPI0_MOSI = 1U,
+ PA17_I2S0_SCLK = 2U,
+ PA17_PWM_CH10 = 3U,
+ PA17_ADC_A11 = 22U,
+ PA18_UART0_TX = 0U,
+ PA18_SPI0_MISO = 1U,
+ PA18_I2S0_WSCLK = 2U,
+ PA18_PWM_CH11 = 3U,
+ PA18_ADC_A12 = 23U,
+ PA19_JTAG_TMS = 0U,
+ PA19_UART1_RX = 1U,
+ PA19_I2S1_SCLK = 2U,
+ PA19_IIC0_SCL = 3U,
+ PA19_ADC_A13 = 24U,
+ PA20_JTAG_TCK = 0U,
+ PA20_UART1_TX = 1U,
+ PA20_I2S1_WSCLK = 2U,
+ PA20_IIC0_SDA = 3U,
+ PA20_ADC_A14 = 25U,
+ PA21_UART0_CTS = 0U,
+ PA21_UART1_CTS = 1U,
+ PA21_I2S0_SDA = 2U,
+ PA21_IIC0_SCL = 3U,
+ PA21_ADC_A15 = 26U,
+ PA22_UART0_RTS = 0U,
+ PA22_UART1_RTS = 1U,
+ PA22_I2S1_SDA = 2U,
+ PA22_IIC0_SDA = 3U,
+ PA23_IIC0_SCL = 0U,
+ PA23_UART0_TX = 1U,
+ PA23_PWM_CH0 = 2U,
+ PA23_SPI0_CS = 3U,
+ PA24_IIC0_SDA = 0U,
+ PA24_UART0_RX = 1U,
+ PA24_PWM_CH1 = 2U,
+ PA24_SPI0_SCK = 3U,
+ PA25_PWMR_OUT = 0U,
+ PA25_UART0_CTS = 1U,
+ PA25_PWM_CH2 = 2U,
+ PA25_SPI0_MOSI = 3U,
+ PA26_I2S1_MCLK = 0U,
+ PA26_UART0_RTS = 1U,
+ PA26_PWM_CH3 = 2U,
+ PA26_SPI0_MISO = 3U,
+ PA27_I2S0_SCLK = 0U,
+ PA27_UART1_RX = 1U,
+ PA27_PWM_CH4 = 2U,
+ PA27_SPI1_CS = 3U,
+ PA28_I2S0_WSCLK = 0U,
+ PA28_UART1_TX = 1U,
+ PA28_PWM_CH5 = 2U,
+ PA28_SPI1_SCK = 3U,
+ PA29_I2S1_SCLK = 0U,
+ PA29_UART1_CTS = 1U,
+ PA29_PWM_CH6 = 2U,
+ PA29_SPI1_MOSI = 3U,
+ PA30_I2S1_WSCLK = 0U,
+ PA30_UART1_RTS = 1U,
+ PA30_PWM_CH7 = 2U,
+ PA30_SPI1_MISO = 3U,
+ PA31_I2S0_SDA = 0U,
+ PA31_PWMR_OUT = 1U,
+ PA31_PWM_CH8 = 2U,
+ PA31_UART0_TX = 3U,
+ PIN_FUNC_GPIO = 4U,
+ PIN_FUNC_END = 0xFFFFFFFFU
+} pin_func_t;
+
+#define CONFIG_IRQ_NUM 64U
+#if CONFIG_INTC_CLIC_PLIC
+#undef CONFIG_IRQ_NUM
+#define CONFIG_IRQ_NUM (64U + PLIC_IRQ_OFFSET)
+#endif
+
+#if CONFIG_INTC_CLIC_APLIC
+#undef CONFIG_IRQ_NUM
+#define CONFIG_IRQ_NUM (64U + APLIC_IRQ_OFFSET)
+#endif
+
+#if CONFIG_INTC_IMSIC_APLIC
+#undef CONFIG_IRQ_NUM
+#define CONFIG_IRQ_NUM (IMSIC_MAX_INTERRUPTS)
+#endif
+
+///< AHB
+#define SPIFLASH_BASE 0x18000000UL
+#define SPIFLASH_SIZE 0x800000U
+#define SRAM_BASE 0x20000000UL
+#define SRAM_SIZE 0x20000U
+
+#if CONFIG_CPU_XUANTIE_E9XX
+
+typedef enum {
+ User_Software_IRQn = 0U, /* User software interrupt */
+ Supervisor_Software_IRQn = 1U, /* Supervisor software interrupt */
+ Machine_Software_IRQn = 3U, /* Machine software interrupt */
+ User_Timer_IRQn = 4U, /* User timer interrupt */
+ Supervisor_Timer_IRQn = 5U, /* Supervisor timer interrupt */
+ CORET_IRQn = 7U, /* Machine timer interrupt */
+ Machine_External_IRQn = 11U, /* Machine external interrupt */
+ DW_UART0_IRQn = 16U,
+ TIM0_IRQn = 18U, /* timer0 Interrupt */
+ TIM1_IRQn = 19U, /* timer1 Interrupt */
+ TIM2_IRQn = 20U, /* timer2 Interrupt */
+ TIM3_IRQn = 21U, /* timer3 Interrupt */
+} irqn_type_t;
+
+#if CONFIG_BOARD_SMARTM_EVB
+#define DW_UART0_BASE 0x180000UL
+#define DW_TIMER0_BASE 0x181000UL
+#define DW_TIMER1_BASE 0x181014UL
+#define DW_TIMER2_BASE 0x181028UL
+#define DW_TIMER3_BASE 0x18103CUL
+
+#else
+
+#define DW_UART0_BASE 0x40015000UL
+#define DW_TIMER0_BASE 0x40011000UL
+#define DW_TIMER0_SIZE 0x14U
+#define DW_TIMER1_BASE (DW_TIMER0_BASE+DW_TIMER0_SIZE)
+#define DW_TIMER1_SIZE DW_TIMER0_SIZE
+#define DW_TIMER2_BASE 0x40011028UL
+#define DW_TIMER2_SIZE 0x14U
+#define DW_TIMER3_BASE (DW_TIMER2_BASE+DW_TIMER2_SIZE)
+#define DW_TIMER3_SIZE DW_TIMER2_SIZE
+#if CONFIG_SUPPORT_NMI_DEMO
+/* fake irq is not work, just for nmi test with smartl fpga(connected TIMER4 to nmi-exception on soc bit of smartl) */
+#define FAKE_IRQ_TIMER4 (-1)
+#define DW_TIMER4_BASE (0x40021000UL)
+#endif
+#endif /* CONFIG_BOARD_SMARTM_EVB */
+
+#else
+
+/* ------------------------- Interrupt Number Definition ------------------------ */
+
+#define Supervisor_Software_IRQn (1U)
+#define Machine_Software_IRQn (3U)
+#define Supervisor_Timer_IRQn (5U)
+#define CORET_IRQn (7U)
+#define Supervisor_External_IRQn (9U)
+#define Machine_External_IRQn (11U)
+#define L1_CACHE_ECC_IRQn (16U)
+
+#if CONFIG_BOARD_XIAOHUI_EVB
+
+#if CONFIG_INTC_CLIC_PLIC
+typedef enum IRQn {
+ L2_CACHE_ECC_IRQn = 1U + PLIC_IRQ_OFFSET, /* l2 cache ecc Interrupt */
+
+ DW_DMA0_IRQn = 17U, /* dma0 Interrupt */
+ DW_UART0_IRQn = 20U + PLIC_IRQ_OFFSET, /* uart Interrupt */
+ TIM0_IRQn = 25U, /* timer0 Interrupt for CLIC*/
+ TIM1_IRQn = 26U, /* timer1 Interrupt for CLIC*/
+ TIM2_IRQn = 27U + PLIC_IRQ_OFFSET, /* timer2 Interrupt */
+ TIM3_IRQn = 28U + PLIC_IRQ_OFFSET, /* timer3 Interrupt */
+ IOPMP0_IRQn = 32U, /* iopmp0 Interrupt */
+ END_IRQn = 1024U + PLIC_IRQ_OFFSET
+} irqn_type_t;
+#elif CONFIG_INTC_CLIC_APLIC
+typedef enum IRQn {
+ L2_CACHE_ECC_IRQn = 1U + APLIC_IRQ_OFFSET, /* l2 cache ecc Interrupt */
+
+ DW_DMA0_IRQn = 17U, /* dma0 Interrupt */
+ DW_UART0_IRQn = 20U + APLIC_IRQ_OFFSET, /* uart Interrupt */
+ TIM0_IRQn = 25U, /* timer0 Interrupt for CLIC*/
+ TIM1_IRQn = 26U, /* timer1 Interrupt for CLIC*/
+ TIM2_IRQn = 27U + APLIC_IRQ_OFFSET, /* timer2 Interrupt */
+ TIM3_IRQn = 28U + APLIC_IRQ_OFFSET, /* timer3 Interrupt */
+ IOPMP0_IRQn = 32U, /* iopmp0 Interrupt */
+ END_IRQn = 1024U + APLIC_IRQ_OFFSET
+} irqn_type_t;
+#else
+/* extern irq number, 1-16 are reserved for inner-cpu */
+typedef enum IRQn {
+ L2_CACHE_ECC_IRQn = 1U, /* l2 cache ecc Interrupt */
+
+ DW_DMA0_IRQn = 17U, /* dma0 Interrupt */
+ DW_UART0_IRQn = 20U, /* uart Interrupt */
+ TIM0_IRQn = 25U, /* timer0 Interrupt */
+ TIM1_IRQn = 26U, /* timer1 Interrupt */
+ TIM2_IRQn = 27U, /* timer2 Interrupt */
+ TIM3_IRQn = 28U, /* timer3 Interrupt */
+ IOPMP0_IRQn = 32U, /* iopmp0 Interrupt */
+} irqn_type_t;
+#endif /* CONFIG_INTC_CLIC_PLIC */
+
+#define DW_UART0_BASE (0x1900d000UL)
+#define DW_TIMER0_BASE (0x19001000UL)
+#define DW_TIMER1_BASE (0x19001014UL)
+#define DW_TIMER2_BASE (0x19001028UL)
+#define DW_TIMER3_BASE (0x1900103CUL)
+#if CONFIG_SUPPORT_NMI_DEMO
+/* fake irq is not work, just for nmi test with smartl fpga(connected TIMER4 to nmi-exception on soc bit of smartl) */
+#define FAKE_IRQ_TIMER4 (-1)
+#define DW_TIMER4_BASE (0x40021000UL)
+#endif
+
+/////////////////////////////////////////////////
+#define DW_DMA0_BASE (0x18000000UL)
+#define XT_IOPMP0_BASE (0x26f00000UL)
+
+#define CONFIG_AXI_DMA_CHANNEL_NUM 8U
+#define CONFIG_AXI_DMA_FIFO_SIZE 0x8U
+#define CONFIG_AXI_DMA_BLK_MAX_SIZE 0x3FFFFFU
+
+// #define CONFIG_AHB_DMA_CHANNEL_NUM 8U
+// #define CONFIG_AHB_DMA_FIFO_SIZE 0x8U
+// #define CONFIG_AHB_DMA_BLK_MAX_SIZE 0xFFFU
+/////////////////////////////////////////////////
+
+#else
+#error "Not support soc!!!"
+#endif /* CONFIG_BOARD_XIAOHUI_EVB */
+
+#endif /* end exx*/
+
+#if CONFIG_INTC_CLIC && CONFIG_INTC_PLIC
+#error "CONFIG_INTC_CLIC and CONFIG_INTC_PLIC cannot coexist"
+#endif
+
+#if CONFIG_INTC_CLIC && CONFIG_INTC_APLIC
+#error "CONFIG_INTC_CLIC and CONFIG_INTC_APLIC cannot coexist"
+#endif
+
+#if CONFIG_INTC_PLIC && CONFIG_INTC_APLIC
+#error "CONFIG_INTC_PLIC and CONFIG_INTC_APLIC cannot coexist"
+#endif
+
+#if CONFIG_INTC_CLIC && CONFIG_INTC_CLIC_PLIC
+#error "CONFIG_INTC_CLIC and CONFIG_INTC_CLIC_PLIC cannot coexist"
+#endif
+
+#if CONFIG_INTC_CLIC && CONFIG_INTC_CLIC_APLIC
+#error "CONFIG_INTC_CLIC and CONFIG_INTC_CLIC_APLIC cannot coexist"
+#endif
+
+#if CONFIG_INTC_CLIC_PLIC && CONFIG_INTC_CLIC_APLIC
+#error "CONFIG_INTC_CLIC_PLIC and CONFIG_INTC_CLIC_APLIC cannot coexist"
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SOC_H_ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/sys_clk.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/sys_clk.h
new file mode 100644
index 000000000..3d74f5e9a
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/include/sys_clk.h
@@ -0,0 +1,117 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file sys_clk.h
+ * @brief header file for setting system frequency.
+ * @version V1.0
+ * @date 9. April 2020
+ ******************************************************************************/
+#ifndef _SYS_CLK_H_
+#define _SYS_CLK_H_
+
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PMU_REG_BASE (wj_pmu_reg_t *)WJ_PMU_BASE
+
+typedef enum {
+ IHS_CLK = 0U, /* internal high speed clock */
+ EHS_CLK, /* external high speed clock */
+ ILS_CLK, /* internal low speed clock */
+ ELS_CLK, /* external low speed clock */
+ PLL_CLK /* PLL clock */
+} clk_src_t;
+
+typedef enum {
+ CPU_24MHZ = 24000000U
+} sys_freq_t;
+
+
+/* pllclkout : ( pllclkin / 2)*( FN + Frac/4096 ) */
+typedef struct {
+
+ uint32_t pll_is_used; /* pll is used */
+
+ uint32_t pll_source; /* select pll input source clock */
+
+ uint32_t pll_src_clk_divider; /* ratio between pll_srcclk clock and pll_clkin clock */
+
+ uint32_t fn; /* integer value of frequency division */
+
+ uint32_t frac; /* decimal value of frequency division */
+
+} pll_config_t;
+
+
+typedef struct {
+ uint32_t system_clk; /* system clock */
+
+ pll_config_t pll_config; /* pll config struct */
+
+ uint32_t sys_clk_source; /* select sysclk source clock */
+
+ uint32_t rtc_clk_source; /* select rtcclk source clock */
+
+ uint32_t mclk_divider; /* ratio between fs_mclk clock and mclk clock */
+
+ uint32_t apb0_clk_divider; /* ratio between mclk clock and apb0 clock */
+
+ uint32_t apb1_clk_divider; /* ratio between mclk clock and apb1 clock */
+
+} system_clk_config_t;
+
+typedef enum {
+ CLK_DIV1 = 0U,
+} apb_div_t;
+
+typedef enum {
+ PLL_FN_18 = 0U,
+} pll_fn_t;
+
+typedef enum {
+ UART0_CLK,
+} clk_module_t;
+
+
+/**
+ \brief Set the system clock according to the parameter
+ \param[in] config system clock config.
+ \return error code
+*/
+csi_error_t soc_sysclk_config(system_clk_config_t *config);
+
+/**
+ \brief Set iic reset
+ \param[in] idx iic idx.
+ \return Null
+*/
+void soc_reset_iic(uint32_t idx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_CLK_H_ */
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/startup.S b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/startup.S
new file mode 100644
index 000000000..2c6f8c3e4
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/startup.S
@@ -0,0 +1,224 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+
+#if !CONFIG_SUPPORT_NON_VECTOR_IRQ
+.section .vectors, "aw", @progbits
+ .align 6
+ .globl __Vectors
+ .type __Vectors, @object
+__Vectors:
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long tspend_handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_IRQHandler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+ .long Default_Handler
+
+ /* External interrupts */
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+ .long Default_IRQHandler
+#else /* CONFIG_SUPPORT_NON_VECTOR_IRQ */
+.section .vectors, "aw", @progbits
+ .align 6
+ .globl __Vectors
+ .type __Vectors, @object
+__Vectors:
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long tspend_handler
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+
+ /* External interrupts */
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+ .long do_irq
+#endif /* CONFIG_SUPPORT_NON_VECTOR_IRQ */
+
+ .size __Vectors, . - __Vectors
+
+ .text
+ .align 2
+ j Reset_Handler
+ .align 2
+ .long 0x594B5343 /* CSKY ASCII */
+ .long 0x594B5343 /* CSKY ASCII */
+ .align 2
+_start:
+ .text
+ .align 2
+ .global Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+.option push
+.option norelax
+ la gp, __global_pointer$
+.option pop
+ la a0, Default_Handler
+ ori a0, a0, 3
+ csrw mtvec, a0
+
+ la a0, __Vectors
+ csrw mtvt, a0
+
+ la sp, g_top_irqstack
+ csrw mscratch, sp
+#ifdef CONFIG_KERNEL_NONE
+ la sp, g_top_mainstack
+#endif
+
+#ifndef __NO_SYSTEM_INIT
+ jal SystemInit
+#endif
+
+ jal pre_main
+
+ .size Reset_Handler, . - Reset_Handler
+
+__exit:
+ j __exit
+
+.section .stack, "aw", @nobits
+ .align 4
+ .global g_base_irqstack
+ .global g_top_irqstack
+g_base_irqstack:
+ .space CONFIG_ARCH_INTERRUPTSTACK
+g_top_irqstack:
+#ifdef CONFIG_KERNEL_NONE
+ .align 4
+ .global g_base_mainstack
+ .global g_top_mainstack
+g_base_mainstack:
+ .space CONFIG_ARCH_MAINSTACK
+g_top_mainstack:
+#endif
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/system.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/system.c
new file mode 100644
index 000000000..468eeda38
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/system.c
@@ -0,0 +1,119 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include "riscv_csr.h"
+
+#if (defined(CONFIG_KERNEL_RHINO) || defined(CONFIG_KERNEL_FREERTOS) || defined(CONFIG_KERNEL_RTTHREAD)) && defined(CONFIG_KERNEL_NONE)
+#error "Please check the current system is baremetal or not!!!"
+#endif
+
+extern void section_data_copy(void);
+extern void section_ram_code_copy(void);
+extern void section_bss_clear(void);
+
+static void cache_init(void)
+{
+ csi_dcache_enable();
+ csi_icache_enable();
+}
+
+static void section_init(void)
+{
+#if CONFIG_XIP
+ section_data_copy();
+ section_ram_code_copy();
+ csi_dcache_clean();
+ csi_icache_invalid();
+#endif
+ section_bss_clear();
+}
+
+static void clic_init(void)
+{
+ int i;
+
+ /* get interrupt level from info */
+ CLIC->CLICCFG = (((CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos) << CLIC_CLICCFG_NLBIT_Pos);
+
+ for (i = 0; i < 64; i++) {
+ CLIC->CLICINT[i].IP = 0;
+#if !CONFIG_SUPPORT_NON_VECTOR_IRQ
+ CLIC->CLICINT[i].ATTR = 1; /* use vector interrupt */
+#else
+ CLIC->CLICINT[i].ATTR = 0; /* use non-vector interrupt */
+#endif
+ csi_vic_set_prio(i, 3);
+ }
+ /* tspend use vector&positive interrupt */
+ CLIC->CLICINT[Machine_Software_IRQn].ATTR = 0x3;
+ csi_vic_set_prio(Machine_Software_IRQn, 1);
+ csi_irq_enable(Machine_Software_IRQn);
+}
+
+static void interrupt_init(void)
+{
+ clic_init();
+#ifdef CONFIG_KERNEL_NONE
+ __enable_excp_irq();
+#endif
+}
+
+/**
+ * @brief initialize the system
+ * Initialize the psr and vbr.
+ * @param None
+ * @return None
+ */
+void SystemInit(void)
+{
+ extern int cpu_features_init(void);
+ cpu_features_init();
+
+ /* enable theadisaee & MM */
+ uint32_t status = __get_MXSTATUS();
+ status |= (1 << 22 | 1 << 15);
+ __set_MXSTATUS(status);
+
+#if __riscv_flen
+ /* enable float ISA */
+ status = __get_MSTATUS();
+ status |= (1 << MSTATUS_FS_SHIFT);
+ __set_MSTATUS(status);
+#endif
+ /* enable mexstatus SPUSHEN and disable SPSWAPEN */
+#if CONFIG_CPU_XUANTIE_E906 || CONFIG_CPU_XUANTIE_E906F || CONFIG_CPU_XUANTIE_E906FD || CONFIG_CPU_XUANTIE_E906P || CONFIG_CPU_XUANTIE_E906FP || CONFIG_CPU_XUANTIE_E906FDP \
+ || CONFIG_CPU_XUANTIE_E907 || CONFIG_CPU_XUANTIE_E907F || CONFIG_CPU_XUANTIE_E907FD || CONFIG_CPU_XUANTIE_E907P || CONFIG_CPU_XUANTIE_E907FP || CONFIG_CPU_XUANTIE_E907FDP
+ status = __get_MEXSTATUS();
+ status |= (0x1 << 16);
+ status &= ~(0x2 << 16);
+ __set_MEXSTATUS(status);
+#endif
+
+ cache_init();
+ section_init();
+ interrupt_init();
+ soc_set_sys_freq(20000000);
+ csi_tick_init();
+}
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/trap_c.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/trap_c.c
new file mode 100644
index 000000000..f36e86b25
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/trap_c.c
@@ -0,0 +1,64 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#if defined(AOS_COMP_DEBUG) && (AOS_COMP_DEBUG > 0)
+#include
+#else
+#define printk printf
+#endif
+
+void (*trap_c_callback)(void);
+
+void trap_c(uintptr_t *regs)
+{
+ int i;
+ unsigned long vec = 0;
+
+ vec = __get_MCAUSE();
+
+ printk("CPU Exception(mcause);: NO.0x%lx", vec);
+ printk("\n");
+
+ for (i = 0; i < 31; i++) {
+ printk("x%d: %p\t", i + 1, (void *)regs[i]);
+
+ if ((i % 4) == 3) {
+ printk("\n");
+ }
+ }
+
+ printk("\n");
+ printk("mepc : %p\n", (void *)regs[31]);
+ printk("mstatus: %p\n", (void *)regs[32]);
+
+ if (trap_c_callback) {
+ trap_c_callback();
+ }
+
+ while (1);
+}
+
+__attribute__((weak)) void exceptionHandler(void *context)
+{
+ trap_c((uintptr_t *)context);
+}
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/vectors.S b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/vectors.S
new file mode 100644
index 000000000..20840bc50
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/arch/e906fdp/vectors.S
@@ -0,0 +1,900 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "riscv_asm_macro.h"
+
+#define RISCV_MCAUSE_IRQ_POS 31
+
+.section .stack, "aw", @nobits
+ .align 4
+ .global g_trapstackbase
+ .global g_top_trapstack
+g_trapstackbase:
+ .space CONFIG_ARCH_INTERRUPTSTACK
+g_top_trapstack:
+
+#if CONFIG_SUPPORT_IRQ_NESTED
+#define IRQ_NESTED_MAX (6)
+.section .bss
+ .align 2
+ irq_nested_level:
+ .long 0
+
+ irq_nested_mcause:
+ .long 0, 0, 0, 0, 0, 0
+#endif
+
+/* for interrupt tail-chaining debug */
+#if CONFIG_DEBUG_TAIL_CHAINING
+.global g_irq_tailchain_loops
+g_irq_tailchain_loops:
+.long 0
+#endif
+
+.text
+
+#if !CONFIG_SUPPORT_IRQ_NESTED
+ .align 2
+ .weak Default_IRQHandler
+ .type Default_IRQHandler, %function
+Default_IRQHandler:
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, -4
+ sw s0, (sp)
+#endif
+
+ csrw mscratch, sp
+ la sp, g_top_irqstack
+ addi sp, sp, -76
+ sw t0, 4(sp)
+ sw t1, 8(sp)
+ csrr t0, mepc
+ csrr t1, mcause
+ sw t1, 64(sp)
+ sw t0, 68(sp)
+ csrr t1, mstatus
+ sw t1, 72(sp)
+ sw ra, 0(sp)
+ sw t2, 12(sp)
+ sw a0, 16(sp)
+ sw a1, 20(sp)
+ sw a2, 24(sp)
+ sw a3, 28(sp)
+ sw a4, 32(sp)
+ sw a5, 36(sp)
+ sw a6, 40(sp)
+ sw a7, 44(sp)
+ sw t3, 48(sp)
+ sw t4, 52(sp)
+ sw t5, 56(sp)
+ sw t6, 60(sp)
+
+#if __riscv_dsp
+ addi sp, sp, -4
+ csrr t0, vxsat
+ sw t0, 0(sp)
+#endif /*__riscv_dsp */
+
+#if CONFIG_CHECK_FPU_DIRTY
+ mv t3, t1
+#endif
+ SAVE_FLOAT_REGISTERS
+
+ la t0, do_irq
+ jalr t0
+
+ /* get mcause from sp */
+ addi t0, sp, 64
+#if __riscv_dsp
+ addi t0, t0, 4
+#endif /*__riscv_dsp */
+#if __riscv_flen == 64
+ addi t0, t0, 164
+#elif __riscv_flen == 32
+ addi t0, t0, 84
+#endif
+ lw a1, (t0)
+ andi a0, a1, 0x3FF
+ slli a0, a0, 2
+
+ /* clear pending */
+ li a2, 0xE0801000
+ add a2, a2, a0
+ lb a3, 0(a2)
+ li a4, 1
+ not a4, a4
+ and a5, a4, a3
+ sb a5, 0(a2)
+
+ RESTORE_xSTATUS
+
+ csrw mcause, a1
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ csrr sp, mscratch
+
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, 4
+#endif
+ mret
+#else /* CONFIG_SUPPORT_IRQ_NESTED */
+ .align 2
+ .weak Default_IRQHandler
+ .type Default_IRQHandler, %function
+Default_IRQHandler:
+ addi sp, sp, -8
+ sw t0, 0(sp)
+ sw t1, 4(sp)
+
+ la t0, irq_nested_level
+ lw t1, (t0)
+ addi t1, t1, 1
+ sw t1, (t0)
+
+ li t0, IRQ_NESTED_MAX
+ /* nested too deeply, may be error happens */
+ bgt t1, t0, Default_Handler
+
+ addi t1, t1, -1
+ la t0, irq_nested_mcause
+ slli t1, t1, 2
+ add t0, t0, t1
+ csrr t1, mcause
+ sw t1, (t0)
+
+ la t0, irq_nested_level
+ lw t1, (t0)
+ li t0, 1
+ bgt t1, t0, .Lnested1
+
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, -8
+ sw s0, (sp)
+ csrr t0, mepc
+ sw t0, 4(sp)
+#endif
+
+ csrw mscratch, sp
+ la sp, g_top_irqstack
+ j .Lnested2
+.Lnested1:
+ lw t0, 0(sp)
+ lw t1, 4(sp)
+ addi sp, sp, 8
+.Lnested2:
+ addi sp, sp, -76
+ sw t0, 4(sp)
+ sw t1, 8(sp)
+ csrr t0, mepc
+ csrr t1, mcause
+ sw t1, 64(sp)
+ sw t0, 68(sp)
+ csrr t1, mstatus
+ sw t1, 72(sp)
+
+ csrs mstatus, 8
+
+ sw ra, 0(sp)
+ sw t2, 12(sp)
+ sw a0, 16(sp)
+ sw a1, 20(sp)
+ sw a2, 24(sp)
+ sw a3, 28(sp)
+ sw a4, 32(sp)
+ sw a5, 36(sp)
+ sw a6, 40(sp)
+ sw a7, 44(sp)
+ sw t3, 48(sp)
+ sw t4, 52(sp)
+ sw t5, 56(sp)
+ sw t6, 60(sp)
+
+#if __riscv_dsp
+ addi sp, sp, -4
+ csrr t0, vxsat
+ sw t0, 0(sp)
+#endif /*__riscv_dsp */
+
+#if CONFIG_CHECK_FPU_DIRTY
+ mv t3, t1
+#endif
+ SAVE_FLOAT_REGISTERS
+
+ la t0, do_irq
+ jalr t0
+
+ csrc mstatus, 8
+
+ /* get mcause from sp */
+ addi t0, sp, 64
+#if __riscv_dsp
+ addi t0, t0, 4
+#endif /*__riscv_dsp */
+#if __riscv_flen == 64
+ addi t0, t0, 164
+#elif __riscv_flen == 32
+ addi t0, t0, 84
+#endif
+ lw a1, (t0)
+ andi a0, a1, 0x3FF
+ slli a0, a0, 2
+
+ /* clear pending */
+ li a2, 0xE0801000
+ add a2, a2, a0
+ lb a3, 0(a2)
+ li a4, 1
+ not a4, a4
+ and a5, a4, a3
+ sb a5, 0(a2)
+
+ la t0, irq_nested_level
+ lw t1, (t0)
+ addi t1, t1, -1
+ sw t1, (t0)
+ bgt t1, zero, .Lnested3
+
+ RESTORE_xSTATUS
+
+ csrw mcause, a1
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ csrr sp, mscratch
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, 8
+#endif
+ lw t0, 0(sp)
+ lw t1, 4(sp)
+ addi sp, sp, 8
+ mret
+
+.Lnested3:
+ /* keep mpil in current mcause & load exception code before */
+ addi t1, t1, -1
+ la t0, irq_nested_mcause
+ slli t1, t1, 2
+ add t1, t0, t1
+ lw t0, (t1)
+ andi t0, t0, 0x3FF
+ andi a0, a1, 0xFFFFFC00
+ or t0, a0, t0
+ csrw mcause, t0
+
+ RESTORE_xSTATUS
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ mret
+#endif /* CONFIG_SUPPORT_IRQ_NESTED */
+
+/******************************************************************************
+ * Functions:
+ * void trap(void);
+ * default exception handler
+ ******************************************************************************/
+ .align 2
+ .global trap
+ .type trap, %function
+trap:
+ csrw mscratch, sp
+ la sp, g_top_trapstack
+ addi sp, sp, -140
+ sw x1, ( 0 )(sp)
+ sw x3, ( 8 )(sp)
+ sw x4, ( 12)(sp)
+ sw x5, ( 16)(sp)
+ sw x6, ( 20)(sp)
+ sw x7, ( 24)(sp)
+ sw x8, ( 28)(sp)
+ sw x9, ( 32)(sp)
+ sw x10,( 36)(sp)
+ sw x11,( 40)(sp)
+ sw x12,( 44)(sp)
+ sw x13,( 48)(sp)
+ sw x14,( 52)(sp)
+ sw x15,( 56)(sp)
+ sw x16,( 60)(sp)
+ sw x17,( 64)(sp)
+ sw x18,( 68)(sp)
+ sw x19,( 72)(sp)
+ sw x20,( 76)(sp)
+ sw x21,( 80)(sp)
+ sw x22,( 84)(sp)
+ sw x23,( 88)(sp)
+ sw x24,( 92)(sp)
+ sw x25,( 96)(sp)
+ sw x26,(100)(sp)
+ sw x27,(104)(sp)
+ sw x28,(108)(sp)
+ sw x29,(112)(sp)
+ sw x30,(116)(sp)
+ sw x31,(120)(sp)
+ csrr a0, mepc
+ sw a0, (124)(sp)
+ csrr a0, mstatus
+ sw a0, (128)(sp)
+ csrr a0, mcause
+ sw a0, (132)(sp)
+ csrr a0, mtval
+ sw a0, (136)(sp)
+ csrr a0, mscratch
+ sw a0, ( 4 )(sp)
+
+ mv a0, sp
+ la a1, exceptionHandler
+ jalr a1
+
+/*******************************************************************************
+ * Functions:
+ * void Default_Handler(void);
+ * Non-Vector Interrupt Handler,Exception Handler,NMI Handler
+ ******************************************************************************/
+#if !CONFIG_SUPPORT_IRQ_NESTED
+ .align 6
+ .weak Default_Handler
+ .type Default_Handler, %function
+Default_Handler:
+ /* Check for nmi */
+ addi sp, sp, -8
+ sw t0, 0x0(sp)
+ sw t1, 0x4(sp)
+ csrr t0, mcause
+
+ srli t1, t0, RISCV_MCAUSE_IRQ_POS
+ bnez t1, is_interrupt
+
+ andi t0, t0, 0x3FF
+ li t1, 24
+ beq t0, t1, .NMI_Handler
+ lw t0, 0x0(sp)
+ lw t1, 0x4(sp)
+ addi sp, sp, 8
+ j trap
+
+is_interrupt:
+ lw t0, 0x0(sp)
+ lw t1, 0x4(sp)
+ addi sp, sp, 8
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, -4
+ sw s0, (sp)
+#endif
+ csrw mscratch, sp
+ la sp, g_top_irqstack
+ addi sp, sp, -76
+ sw t0, 4(sp)
+ sw t1, 8(sp)
+ csrr t0, mepc
+ csrr t1, mcause
+ sw t1, 64(sp)
+ sw t0, 68(sp)
+ csrr t1, mstatus
+ sw t1, 72(sp)
+
+ sw ra, 0(sp)
+ sw t2, 12(sp)
+ sw a0, 16(sp)
+ sw a1, 20(sp)
+ sw a2, 24(sp)
+ sw a3, 28(sp)
+ sw a4, 32(sp)
+ sw a5, 36(sp)
+ sw a6, 40(sp)
+ sw a7, 44(sp)
+ sw t3, 48(sp)
+ sw t4, 52(sp)
+ sw t5, 56(sp)
+ sw t6, 60(sp)
+
+#if __riscv_dsp
+ addi sp, sp, -4
+ csrr t0, vxsat
+ sw t0, 0(sp)
+#endif /*__riscv_dsp */
+
+#if CONFIG_CHECK_FPU_DIRTY
+ mv t3, t1
+#endif
+ SAVE_FLOAT_REGISTERS
+
+#if CONFIG_DEBUG_TAIL_CHAINING
+ li t2, 0
+ la t1, g_irq_tailchain_loops
+ sw t2, 0(t1)
+#endif
+
+ csrrci t0, mnxti, MSTATUS_MIE
+ beqz t0, irq_done
+
+irq_loop:
+#if CONFIG_DEBUG_TAIL_CHAINING
+ la t2, g_irq_tailchain_loops
+ lw t1, 0(t2)
+ addi t1, t1, 1
+ sw t1, 0(t2)
+#endif
+ lw t1, 0(t0)
+ jalr t1
+ csrrci t0, mnxti, MSTATUS_MIE
+ bnez t0, irq_loop
+
+irq_done:
+ RESTORE_xSTATUS
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw a1, 64(sp)
+ csrw mcause, a1
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ csrr sp, mscratch
+
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, 4
+#endif
+ mret
+
+#else /* CONFIG_SUPPORT_IRQ_NESTED */
+
+ .align 6
+ .weak Default_Handler
+ .type Default_Handler, %function
+Default_Handler:
+ addi sp, sp, -8
+ sw t0, 0x0(sp)
+ sw t1, 0x4(sp)
+
+ csrr t0, mcause
+
+ /* Check is interrupt */
+ srli t1, t0, RISCV_MCAUSE_IRQ_POS
+ bnez t1, is_interrupt
+
+ /* Check for nmi */
+ andi t0, t0, 0x3FF
+ li t1, 24
+ beq t0, t1, .NMI_Handler
+
+ lw t0, 0x0(sp)
+ lw t1, 0x4(sp)
+ addi sp, sp, 8
+
+ /* is exception */
+ j trap
+
+is_interrupt:
+ la t0, irq_nested_level
+ lw t1, (t0)
+ addi t1, t1, 1
+ sw t1, (t0)
+
+ li t0, IRQ_NESTED_MAX
+ /* nested too deeply, may be error happens */
+ bgt t1, t0, trap
+
+ addi t1, t1, -1
+ la t0, irq_nested_mcause
+ slli t1, t1, 2
+ add t0, t0, t1
+ csrr t1, mcause
+ sw t1, (t0)
+
+ la t0, irq_nested_level
+ lw t1, (t0)
+ li t0, 1
+ bgt t1, t0, .Nested_Context
+
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, -8
+ sw s0, (sp)
+ csrr t0, mepc
+ sw t0, 4(sp)
+#endif
+
+ csrw mscratch, sp
+ la sp, g_top_irqstack
+ j .Save_Context
+
+.Nested_Context:
+ lw t0, 0(sp)
+ lw t1, 4(sp)
+ addi sp, sp, 8
+.Save_Context:
+ addi sp, sp, -76
+ sw t0, 4(sp)
+ sw t1, 8(sp)
+ csrr t0, mepc
+ csrr t1, mcause
+ sw t1, 64(sp)
+ sw t0, 68(sp)
+ csrr t1, mstatus
+ sw t1, 72(sp)
+
+ sw ra, 0(sp)
+ sw t2, 12(sp)
+ sw a0, 16(sp)
+ sw a1, 20(sp)
+ sw a2, 24(sp)
+ sw a3, 28(sp)
+ sw a4, 32(sp)
+ sw a5, 36(sp)
+ sw a6, 40(sp)
+ sw a7, 44(sp)
+ sw t3, 48(sp)
+ sw t4, 52(sp)
+ sw t5, 56(sp)
+ sw t6, 60(sp)
+
+#if __riscv_dsp
+ addi sp, sp, -4
+ csrr t0, vxsat
+ sw t0, 0(sp)
+#endif /*__riscv_dsp */
+
+#if CONFIG_CHECK_FPU_DIRTY
+ mv t3, t1
+#endif
+ SAVE_FLOAT_REGISTERS
+
+ csrrci t0, mnxti, MSTATUS_MIE
+ csrs mstatus, 8 /* enable irq for preemption */
+ lw t1, 0(t0) /* Get handler from vector table */
+ jalr t1 /* Call handler */
+
+ csrc mstatus, 8 /* disable irq for critical section */
+
+ /* get mcause from sp */
+ addi t0, sp, 64
+#if __riscv_dsp
+ addi t0, t0, 4
+#endif /*__riscv_dsp */
+#if __riscv_flen == 64
+ addi t0, t0, 164
+#elif __riscv_flen == 32
+ addi t0, t0, 84
+#endif
+ lw a1, (t0)
+
+ la t0, irq_nested_level
+ lw t1, (t0)
+ addi t1, t1, -1
+ sw t1, (t0)
+ bgt t1, zero, .Nested_Return
+
+ RESTORE_xSTATUS
+
+ csrw mcause, a1
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ csrr sp, mscratch
+#if CONFIG_PROFILING_PERF && CONFIG_PERF_BACKTRACE_USE_FP
+ addi sp, sp, 8
+#endif
+ lw t0, 0(sp)
+ lw t1, 4(sp)
+ addi sp, sp, 8
+ mret
+
+.Nested_Return:
+ /* keep mpil in current mcause & load exception code before */
+ addi t1, t1, -1
+ la t0, irq_nested_mcause
+ slli t1, t1, 2
+ add t1, t0, t1
+ lw t0, (t1)
+ andi t0, t0, 0x3FF
+ andi a0, a1, 0xFFFFFC00
+ or t0, a0, t0
+ csrw mcause, t0
+
+ RESTORE_xSTATUS
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ mret
+#endif /* CONFIG_SUPPORT_IRQ_NESTED */
+.NMI_Handler:
+ /* mscratch may be used before */
+ addi sp, sp, -4
+ csrr t0, mscratch
+ sw t0, 0x0(sp)
+
+ csrw mscratch, sp
+ la sp, g_top_trapstack
+ addi sp, sp, -76
+ sw t0, 4(sp)
+ sw t1, 8(sp)
+ csrr t0, mepc
+ csrr t1, mcause
+ sw t1, 64(sp)
+ sw t0, 68(sp)
+ csrr t1, mstatus
+ sw t1, 72(sp)
+
+ sw ra, 0(sp)
+ sw t2, 12(sp)
+ sw a0, 16(sp)
+ sw a1, 20(sp)
+ sw a2, 24(sp)
+ sw a3, 28(sp)
+ sw a4, 32(sp)
+ sw a5, 36(sp)
+ sw a6, 40(sp)
+ sw a7, 44(sp)
+ sw t3, 48(sp)
+ sw t4, 52(sp)
+ sw t5, 56(sp)
+ sw t6, 60(sp)
+
+#if __riscv_dsp
+ addi sp, sp, -4
+ csrr t0, vxsat
+ sw t0, 0(sp)
+#endif /*__riscv_dsp */
+
+#if CONFIG_CHECK_FPU_DIRTY
+ mv t3, t1
+#endif
+ SAVE_FLOAT_REGISTERS
+
+ la t0, handle_nmi_exception
+ jalr t0
+
+ /* get mcause from sp */
+ addi t0, sp, 64
+#if __riscv_dsp
+ addi t0, t0, 4
+#endif /*__riscv_dsp */
+#if __riscv_flen == 64
+ addi t0, t0, 164
+#elif __riscv_flen == 32
+ addi t0, t0, 84
+#endif
+ lw a1, (t0)
+ andi a0, a1, 0x3FF
+ slli a0, a0, 2
+
+ /* clear pending */
+ li a2, 0xE0801000
+ add a2, a2, a0
+ lb a3, 0(a2)
+ li a4, 1
+ not a4, a4
+ and a5, a4, a3
+ sb a5, 0(a2)
+
+ RESTORE_xSTATUS
+
+ csrw mcause, a1
+
+ RESTORE_FLOAT_REGISTERS
+
+#if __riscv_dsp
+ lw t0, 0(sp)
+ csrw vxsat, t0
+ addi sp, sp, 4
+#endif /*__riscv_dsp */
+
+ lw t0, 68(sp)
+ csrw mepc, t0
+ lw t0, 72(sp)
+ csrw mstatus, t0
+
+ lw ra, 0(sp)
+ lw t0, 4(sp)
+ lw t1, 8(sp)
+ lw t2, 12(sp)
+ lw a0, 16(sp)
+ lw a1, 20(sp)
+ lw a2, 24(sp)
+ lw a3, 28(sp)
+ lw a4, 32(sp)
+ lw a5, 36(sp)
+ lw a6, 40(sp)
+ lw a7, 44(sp)
+ lw t3, 48(sp)
+ lw t4, 52(sp)
+ lw t5, 56(sp)
+ lw t6, 60(sp)
+
+ addi sp, sp, 76
+ csrr sp, mscratch
+
+ /* restore mscratch */
+ lw t0, 0x0(sp)
+ csrw mscratch, t0
+ addi sp, sp, 4
+
+ lw t0, 0x0(sp)
+ lw t1, 0x4(sp)
+ addi sp, sp, 8
+
+ mret
+
+ .size Default_Handler, . - Default_Handler
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler tspend_handler
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/dw_uart_ll.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/dw_uart_ll.c
new file mode 100644
index 000000000..15ae00beb
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/dw_uart_ll.c
@@ -0,0 +1,164 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file dw_uart_ll.c
+ * @brief dw uart ll driver
+ * @version V1.0
+ * @date 18. December 2024
+ ******************************************************************************/
+#include
+
+int32_t dw_uart_wait_idle(dw_uart_regs_t *uart_base)
+{
+ uint32_t timecount = 0U;
+ int32_t ret = 0;
+
+ while ((uart_base->USR & DW_UART_USR_BUSY_SET) && (timecount < UART_BUSY_TIMEOUT)) {
+ timecount++;
+ }
+
+ if (timecount >= UART_BUSY_TIMEOUT) {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_wait_timeout(dw_uart_regs_t *uart_base)
+{
+ uint32_t timecount = 0U;
+ int32_t ret = 0;
+
+ while ((uart_base->LSR & 0x81U) || (uart_base->USR & 0x1U)) {
+ uart_base->LSR;
+ uart_base->RBR;
+ timecount++;
+
+ if (timecount >= UART_BUSY_TIMEOUT) {
+ ret = -1;
+ break;
+ }
+ }
+
+ if (ret == 0) {
+ ret = dw_uart_wait_idle(uart_base);
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_config_baudrate(dw_uart_regs_t *uart_base, uint32_t baud, uint32_t uart_freq)
+{
+ uint32_t divisor;
+ int32_t ret = 0;
+ ret = dw_uart_wait_timeout(uart_base);
+
+ if (ret == 0) {
+ if ((uart_freq / 16) % baud >= (baud / 2))
+ divisor = (uart_freq / 16) / baud + 1;
+ else
+ divisor = (uart_freq / 16) / baud;
+
+ uart_base->LCR |= DW_UART_LCR_DLAB_EN;
+
+ /* DLL and DLH is lower 8-bits and higher 8-bits of divisor.*/
+ uart_base->DLH = (divisor >> 8U) & 0xFFU;
+ uart_base->DLL = divisor & 0xFFU;
+ /*
+ * The DLAB must be cleared after the baudrate is setted
+ * to access other registers.
+ */
+ uart_base->LCR &= (~DW_UART_LCR_DLAB_EN);
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_config_stop_bits(dw_uart_regs_t *uart_base, uint32_t stop_bits)
+{
+ int32_t ret;
+ ret = dw_uart_wait_timeout(uart_base);
+
+ if (ret == 0) {
+
+ //when data length is 5 bits, use dw_uart_config_stop_bits_2 will be 1.5 stop bits
+ if (stop_bits == 1U) {
+ dw_uart_config_stop_bits_1(uart_base);
+ } else if (stop_bits == 2U) {
+ dw_uart_config_stop_bits_2(uart_base);
+ }
+ }
+
+ //FIXME: no console output sometimes
+ mdelay(1);
+
+ return ret;
+}
+
+int32_t dw_uart_config_parity_none(dw_uart_regs_t *uart_base)
+{
+ int32_t ret;
+ ret = dw_uart_wait_timeout(uart_base);
+
+ if (ret == 0) {
+ uart_base->LCR &= (~DW_UART_LCR_PEN_EN);
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_config_parity_odd(dw_uart_regs_t *uart_base)
+{
+ int32_t ret;
+
+ ret = dw_uart_wait_timeout(uart_base);
+
+ if (ret == 0) {
+ uart_base->LCR |= DW_UART_LCR_PEN_EN;
+ uart_base->LCR &= ~(DW_UART_LCR_EPS_EN);
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_config_parity_even(dw_uart_regs_t *uart_base)
+{
+ int32_t ret;
+
+ ret = dw_uart_wait_timeout(uart_base);
+
+ if (ret == 0) {
+ uart_base->LCR |= DW_UART_LCR_PEN_EN;
+ uart_base->LCR |= DW_UART_LCR_EPS_EN;
+ }
+
+ return ret;
+}
+
+int32_t dw_uart_config_data_bits(dw_uart_regs_t *uart_base, uint32_t data_bits)
+{
+ int32_t ret;
+
+ ret = dw_uart_wait_timeout(uart_base);
+
+ uart_base->LCR &= 0xFCU;
+ uart_base->LCR |= (data_bits - 5U);
+
+ return ret;
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/uart.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/uart.c
new file mode 100644
index 000000000..5f335b4da
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/drivers/uart.c
@@ -0,0 +1,809 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file uart.c
+ * @brief CSI Source File for uart Driver
+ * @version V2.01
+ * @date 2020-04-09
+ ******************************************************************************/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define UART_TIMEOUT 0x10000000U
+#define UART_MAX_FIFO 0x10U
+
+extern uint16_t uart_tx_hs_num[];
+extern uint16_t uart_rx_hs_num[];
+extern const csi_pinmap_t uart_pinmap[];
+
+static uint8_t find_max_prime_num(uint32_t num)
+{
+ uint8_t ret;
+
+ if (!(num % 8U)) {
+ ret = 8U;
+ } else if (!(num % 4U)) {
+ ret = 4U;
+ } else {
+ ret = 1U;
+ }
+
+ return ret;
+}
+
+static void dw_uart_intr_recv_data(csi_uart_t *uart)
+{
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+ uint32_t rxfifo_num = 1;/// uart->rx_size) ? uart->rx_size : rxfifo_num;
+
+ if ((uart->rx_data == NULL) || (uart->rx_size == 0U)) {
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_RECEIVE_FIFO_READABLE, uart->arg);
+ } else {
+ do {
+ dw_uart_getchar(uart_base);
+ } while (--rxfifo_num);
+ }
+ } else {
+ do {
+ *uart->rx_data = dw_uart_getchar(uart_base);
+ uart->rx_size--;
+ uart->rx_data++;
+ } while (--rxdata_num);
+
+ if (uart->rx_size == 0U) {
+ uart->state.readable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_RECEIVE_COMPLETE, uart->arg);
+ }
+ }
+ }
+}
+
+static void uart_intr_send_data(csi_uart_t *uart)
+{
+ uint32_t i = 0U, trans_num = 0U;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)uart->dev.reg_base;
+
+ if (uart->tx_size > UART_MAX_FIFO) {
+ trans_num = UART_MAX_FIFO;
+ } else {
+ trans_num = uart->tx_size;
+ }
+
+ for (i = 0U; i < trans_num; i++) {
+ //dw_uart_putchar(uart_base, *uart->tx_data);
+ csi_uart_putc(uart, *uart->tx_data);
+ uart->tx_size--;
+ uart->tx_data++;
+ }
+
+ if (uart->tx_size == 0U) {
+ dw_uart_disable_trans_irq(uart_base);
+ uart->state.writeable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_SEND_COMPLETE, uart->arg);
+ }
+ }
+}
+
+static void uart_intr_line_error(csi_uart_t *uart)
+{
+ uint32_t uart_status;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ uart->state.readable = 1U;
+ uart->state.writeable = 1U;
+ uart_status = dw_uart_get_line_status(uart_base);
+
+ if (uart->callback) {
+ if (uart_status & DW_UART_LSR_OE_ERROR) {
+ uart->callback(uart, UART_EVENT_ERROR_OVERFLOW, uart->arg);
+ }
+
+ if (uart_status & DW_UART_LSR_PE_ERROR) {
+ uart->callback(uart, UART_EVENT_ERROR_PARITY, uart->arg);
+ }
+
+ if (uart_status & DW_UART_LSR_FE_ERROR) {
+ uart->callback(uart, UART_EVENT_ERROR_FRAMING, uart->arg);
+ }
+
+ if (uart_status & DW_UART_LSR_BI_SET) {
+ uart->callback(uart, UART_ENENT_BREAK_INTR, uart->arg);
+ }
+ }
+}
+
+void dw_uart_irq_handler(void *arg)
+{
+ csi_uart_t *uart = (csi_uart_t *)arg;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)uart->dev.reg_base;
+
+ uint8_t intr_state;
+
+ intr_state = (uint8_t)(uart_base->IIR & 0xfU);
+
+ switch (intr_state) {
+ case DW_UART_IIR_IID_RECV_LINE_STATUS: /* interrupt source: Overrun/parity/framing errors or break interrupt */
+ uart_intr_line_error(uart);
+ break;
+
+ case DW_UART_IIR_IID_THR_EMPTY: /* interrupt source:sendter holding register empty */
+ uart_intr_send_data(uart);
+ break;
+
+ case DW_UART_IIR_IID_RECV_DATA_AVAIL: /* interrupt source:receiver data available or receiver fifo trigger level reached */
+ case DW_UART_IIR_IID_CHARACTER_TIMEOUT:
+ dw_uart_intr_recv_data(uart);
+ break;
+
+ default:
+ break;
+ }
+}
+
+csi_error_t csi_uart_init(csi_uart_t *uart, uint32_t idx)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+
+ csi_error_t ret = CSI_OK;
+ dw_uart_regs_t *uart_base;
+
+ ret = target_get(DEV_DW_UART_TAG, idx, &uart->dev);
+
+ if (ret == CSI_OK) {
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ dw_uart_fifo_init(uart_base);
+
+ uart->rx_size = 0U;
+ uart->tx_size = 0U;
+ uart->rx_data = NULL;
+ uart->tx_data = NULL;
+ uart->tx_dma = NULL;
+ uart->rx_dma = NULL;
+ dw_uart_disable_trans_irq(uart_base);
+ dw_uart_disable_recv_irq(uart_base);
+ dw_uart_disable_auto_flow_control(uart_base);
+ }
+
+ return ret;
+}
+
+void csi_uart_uninit(csi_uart_t *uart)
+{
+ CSI_PARAM_CHK_NORETVAL(uart);
+
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ uart->rx_size = 0U;
+ uart->tx_size = 0U;
+ uart->rx_data = NULL;
+ uart->tx_data = NULL;
+
+ dw_uart_disable_trans_irq(uart_base);
+ dw_uart_disable_recv_irq(uart_base);
+ csi_irq_disable((uint32_t)(uart->dev.irq_num));
+ csi_irq_detach((uint32_t)(uart->dev.irq_num));
+}
+
+csi_error_t csi_uart_baud(csi_uart_t *uart, uint32_t baud)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+
+ int32_t ret = 0;
+ csi_error_t csi_ret = CSI_OK;
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ ret = dw_uart_config_baudrate(uart_base, baud, soc_get_uart_freq((uint32_t)(uart->dev.idx)));
+
+ if (ret == 0) {
+ csi_ret = CSI_OK;
+ } else {
+ csi_ret = CSI_ERROR;
+ }
+
+ return csi_ret;
+}
+
+csi_error_t csi_uart_format(csi_uart_t *uart, csi_uart_data_bits_t data_bits,
+ csi_uart_parity_t parity, csi_uart_stop_bits_t stop_bits)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+
+ int32_t ret = 0;
+ csi_error_t csi_ret = CSI_OK;
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ switch (data_bits) {
+ case UART_DATA_BITS_5:
+ ret = dw_uart_config_data_bits(uart_base, 5U);
+ break;
+
+ case UART_DATA_BITS_6:
+ ret = dw_uart_config_data_bits(uart_base, 6U);
+ break;
+
+ case UART_DATA_BITS_7:
+ ret = dw_uart_config_data_bits(uart_base, 7U);
+ break;
+
+ case UART_DATA_BITS_8:
+ ret = dw_uart_config_data_bits(uart_base, 8U);
+ break;
+
+ default:
+ ret = -1;
+ break;
+ }
+
+ if (ret == 0) {
+ switch (parity) {
+ case UART_PARITY_NONE:
+ ret = dw_uart_config_parity_none(uart_base);
+ break;
+
+ case UART_PARITY_ODD:
+ ret = dw_uart_config_parity_odd(uart_base);
+ break;
+
+ case UART_PARITY_EVEN:
+ ret = dw_uart_config_parity_even(uart_base);
+ break;
+
+ default:
+ ret = -1;
+ break;
+ }
+
+ if (ret == 0) {
+ switch (stop_bits) {
+ case UART_STOP_BITS_1:
+ ret = dw_uart_config_stop_bits(uart_base, 1U);
+ break;
+
+ case UART_STOP_BITS_2:
+ ret = dw_uart_config_stop_bits(uart_base, 2U);
+ break;
+
+ case UART_STOP_BITS_1_5:
+ if (data_bits == UART_DATA_BITS_5) {
+ ret = dw_uart_config_stop_bits(uart_base, 2U);
+ break;
+ }
+
+ default:
+ ret = -1;
+ break;
+ }
+
+ if (ret != 0) {
+ csi_ret = CSI_ERROR;
+ }
+
+ } else {
+ csi_ret = CSI_ERROR;
+ }
+
+ } else {
+ csi_ret = CSI_ERROR;
+ }
+
+ return csi_ret;
+}
+
+csi_error_t csi_uart_flowctrl(csi_uart_t *uart, csi_uart_flowctrl_t flowctrl)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ csi_error_t csi_ret = CSI_OK;
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ switch (flowctrl) {
+ case UART_FLOWCTRL_CTS:
+ dw_uart_wait_idle(uart_base);
+ dw_uart_enable_auto_flow_control(uart_base);
+ break;
+
+ case UART_FLOWCTRL_RTS_CTS:
+ dw_uart_wait_idle(uart_base);
+ dw_uart_enable_auto_flow_control(uart_base);
+ break;
+
+ case UART_FLOWCTRL_NONE:
+ dw_uart_wait_idle(uart_base);
+ break;
+
+ case UART_FLOWCTRL_RTS:
+ default:
+ csi_ret = CSI_UNSUPPORTED;
+ break;
+ }
+
+ return csi_ret;
+}
+
+void csi_uart_putc(csi_uart_t *uart, uint8_t ch)
+{
+ CSI_PARAM_CHK_NORETVAL(uart);
+
+ volatile int i = 10;
+ uint32_t timeout = UART_TIMEOUT;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ while (!dw_uart_putready(uart_base) && timeout--);
+
+ if (timeout) {
+ //FIXME: fix print luanma on irq-mode sometimes. maybe hw bug
+ while (i--);
+ dw_uart_putchar(uart_base, ch);
+ }
+}
+
+uint8_t csi_uart_getc(csi_uart_t *uart)
+{
+ CSI_PARAM_CHK(uart, 0U);
+
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ while (!dw_uart_getready(uart_base));
+
+ return dw_uart_getchar(uart_base);
+}
+
+int32_t csi_uart_receive(csi_uart_t *uart, void *data, uint32_t size, uint32_t timeout)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(data, CSI_ERROR);
+
+ uint8_t *temp_data = (uint8_t *)data;
+ int32_t recv_num = 0;
+ uint32_t recv_start, timeout_flag = 0U;
+ uint32_t intr_en_status;
+
+ recv_start = csi_tick_get_ms();
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)uart->dev.reg_base;
+ intr_en_status = dw_uart_get_intr_en_status(uart_base);
+ dw_uart_disable_recv_irq(uart_base);
+
+ while (recv_num < (int32_t)size) {
+ while (!dw_uart_getready(uart_base)) {
+ if ((csi_tick_get_ms() - recv_start) >= timeout) {
+ timeout_flag = 1U;
+ break;
+ }
+ };
+
+ if (timeout_flag == 0U) {
+ *temp_data = dw_uart_getchar(uart_base);
+ temp_data++;
+ recv_num++;
+ recv_start = csi_tick_get_ms();
+ } else {
+ break;
+ }
+ }
+
+ dw_uart_set_intr_en_status(uart_base, intr_en_status);
+
+ return recv_num;
+}
+
+csi_error_t dw_uart_receive_intr(csi_uart_t *uart, void *data, uint32_t num)
+{
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+ uart->rx_data = (uint8_t *)data;
+ uart->rx_size = num;
+
+ dw_uart_enable_recv_irq(uart_base);
+
+ return CSI_OK;
+}
+
+csi_error_t csi_uart_receive_async(csi_uart_t *uart, void *data, uint32_t size)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(data, CSI_ERROR);
+ CSI_PARAM_CHK(uart->callback, CSI_ERROR);
+ CSI_PARAM_CHK(uart->receive, CSI_ERROR);
+
+ csi_error_t ret;
+
+ ret = uart->receive(uart, data, size);
+
+ if (ret == CSI_OK) {
+ uart->state.readable = 0U;
+ }
+
+ return ret;
+}
+
+int32_t csi_uart_send(csi_uart_t *uart, const void *data, uint32_t size, uint32_t timeout)
+{
+ /* check data and uart */
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(data, CSI_ERROR);
+ CSI_PARAM_CHK(size, CSI_ERROR);
+
+ dw_uart_regs_t *uart_base;
+ uint8_t *ch = (uint8_t *)data;
+ int32_t trans_num = 0;
+ uint32_t send_start, timeout_flag = 0U;
+ uint32_t intr_en_status;
+
+ uart_base = (dw_uart_regs_t *)uart->dev.reg_base;
+ /* store the status of intr */
+ intr_en_status = dw_uart_get_intr_en_status(uart_base);
+ dw_uart_disable_trans_irq(uart_base);
+
+ send_start = csi_tick_get_ms();
+
+ while (trans_num < (int32_t)size) {
+ while (!dw_uart_putready(uart_base)) {
+ if ((csi_tick_get_ms() - send_start) >= timeout) {
+ timeout_flag = 1U;
+ break;
+ }
+ };
+
+ if (timeout_flag == 0U) {
+ dw_uart_putchar(uart_base, *ch++);
+ /* update the timeout */
+ send_start = csi_tick_get_ms();
+ trans_num++;
+ } else {
+ break;
+ }
+ }
+
+ dw_uart_set_intr_en_status(uart_base, intr_en_status);
+
+ return trans_num;
+}
+
+csi_error_t dw_uart_send_intr(csi_uart_t *uart, const void *data, uint32_t size)
+{
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)uart->dev.reg_base;
+
+ uart->tx_data = (uint8_t *)data;
+ uart->tx_size = size;
+ dw_uart_enable_trans_irq(uart_base);
+
+ return CSI_OK;
+}
+
+csi_error_t csi_uart_send_async(csi_uart_t *uart, const void *data, uint32_t size)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(data, CSI_ERROR);
+ CSI_PARAM_CHK(uart->callback, CSI_ERROR);
+ CSI_PARAM_CHK(uart->send, CSI_ERROR);
+
+ csi_error_t ret;
+ ret = uart->send(uart, data, size);
+
+ if (ret == CSI_OK) {
+ uart->state.writeable = 0U;
+ }
+
+ return ret;
+}
+
+csi_error_t csi_uart_attach_callback(csi_uart_t *uart, void *callback, void *arg)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ uart->callback = callback;
+ uart->arg = arg;
+ uart->send = dw_uart_send_intr;
+ uart->receive = dw_uart_receive_intr;
+ csi_irq_attach((uint32_t)(uart->dev.irq_num), &dw_uart_irq_handler, &uart->dev);
+ csi_irq_enable((uint32_t)(uart->dev.irq_num));
+ dw_uart_enable_recv_irq(uart_base);
+
+ return CSI_OK;
+}
+
+void csi_uart_detach_callback(csi_uart_t *uart)
+{
+ CSI_PARAM_CHK_NORETVAL(uart);
+
+ dw_uart_regs_t *uart_base;
+ uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ uart->callback = NULL;
+ uart->arg = NULL;
+ uart->send = NULL;
+ uart->receive = NULL;
+ dw_uart_disable_recv_irq(uart_base);
+ csi_irq_disable((uint32_t)(uart->dev.irq_num));
+ csi_irq_detach((uint32_t)(uart->dev.irq_num));
+}
+
+csi_error_t csi_uart_get_state(csi_uart_t *uart, csi_state_t *state)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(state, CSI_ERROR);
+
+ *state = uart->state;
+
+ return CSI_OK;
+}
+
+static void dw_uart_dma_event_cb(csi_dma_ch_t *dma, csi_dma_event_t event, void *arg)
+{
+ csi_uart_t *uart = (csi_uart_t *)dma->parent;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+
+ if (event == DMA_EVENT_TRANSFER_ERROR) {/* DMA transfer ERROR */
+ if ((uart->tx_dma != NULL) && (uart->tx_dma->ch_id == dma->ch_id)) {
+ csi_dma_ch_stop(dma);
+ dw_uart_fifo_init(uart_base);
+
+ uart->state.writeable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_ERROR_OVERFLOW, uart->arg);
+ }
+ } else {
+ csi_dma_ch_stop(dma);
+ dw_uart_fifo_init(uart_base);
+ /* enable received data available */
+ dw_uart_enable_recv_irq(uart_base);
+
+ uart->state.readable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_ERROR_FRAMING, uart->arg);
+ }
+ }
+ } else if (event == DMA_EVENT_TRANSFER_DONE) {/* DMA transfer complete */
+ if ((uart->tx_dma != NULL) && (uart->tx_dma->ch_id == dma->ch_id)) {
+
+ csi_dma_ch_stop(dma);
+ dw_uart_fifo_init(uart_base);
+
+ uart->state.writeable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_SEND_COMPLETE, uart->arg);
+ }
+ } else {
+ csi_dma_ch_stop(dma);
+ dw_uart_fifo_init(uart_base);
+ /* enable received data available */
+ dw_uart_enable_recv_irq(uart_base);
+
+ uart->state.readable = 1U;
+
+ if (uart->callback) {
+ uart->callback(uart, UART_EVENT_RECEIVE_COMPLETE, uart->arg);
+ }
+ }
+ }
+}
+
+csi_error_t dw_uart_send_dma(csi_uart_t *uart, const void *data, uint32_t num)
+{
+ csi_dma_ch_config_t config;
+ memset(&config, 0, sizeof(csi_dma_ch_config_t));
+ uint32_t fcr_reg = UART_FIFO_INIT_CONFIG;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+ csi_dma_ch_t *dma_ch = (csi_dma_ch_t *)uart->tx_dma;
+
+ uart->tx_data = (uint8_t *)data;
+ uart->tx_size = num;
+ dw_uart_disable_recv_irq(uart_base);
+ dw_uart_disable_trans_irq(uart_base);
+ config.src_inc = DMA_ADDR_INC;
+ config.dst_inc = DMA_ADDR_CONSTANT;
+ config.src_tw = DMA_DATA_WIDTH_8_BITS;
+ config.dst_tw = DMA_DATA_WIDTH_8_BITS;
+
+ /* config for wj_dma */
+ config.group_len = find_max_prime_num(num);
+ config.trans_dir = DMA_MEM2PERH;
+
+ /* config for etb */
+ config.handshake = uart_tx_hs_num[uart->dev.idx];
+
+ csi_dma_ch_config(dma_ch, &config);
+
+ fcr_reg &= ~(DW_UART_FCR_TET_Msk);
+
+ if (config.group_len >= (UART_MAX_FIFO / 2U)) {
+ fcr_reg |= DW_UART_FCR_TET_FIFO_1_2_FULL;
+ } else if (config.group_len >= (UART_MAX_FIFO / 4U)) {
+ fcr_reg |= DW_UART_FCR_TET_FIFO_1_4_FULL;
+ } else if (config.group_len >= (UART_MAX_FIFO / 8U)) {
+ fcr_reg |= DW_UART_FCR_TET_FIFO_2_CHAR;
+ } else {
+ fcr_reg |= DW_UART_FCR_TET_FIFO_EMTPY;
+ }
+
+ soc_dcache_clean_invalid_range((unsigned long)uart->tx_data, uart->tx_size);
+ dw_uart_set_fcr_reg(uart_base, fcr_reg);
+ csi_dma_ch_start(uart->tx_dma, (void *)uart->tx_data, (uint8_t *) & (uart_base->THR), uart->tx_size);
+
+ return CSI_OK;
+}
+
+csi_error_t dw_uart_receive_dma(csi_uart_t *uart, void *data, uint32_t num)
+{
+ csi_dma_ch_config_t config;
+ memset(&config, 0, sizeof(csi_dma_ch_config_t));
+ csi_error_t ret = CSI_OK;
+ uint32_t fcr_reg = UART_FIFO_INIT_CONFIG;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)HANDLE_REG_BASE(uart);
+ csi_dma_ch_t *dma = (csi_dma_ch_t *)uart->rx_dma;
+
+ dw_uart_disable_trans_irq(uart_base);
+ dw_uart_disable_recv_irq(uart_base);
+ uart->rx_data = (uint8_t *)data;
+ uart->rx_size = num;
+ config.src_inc = DMA_ADDR_CONSTANT;
+ config.dst_inc = DMA_ADDR_INC;
+ config.src_tw = DMA_DATA_WIDTH_8_BITS;
+ config.dst_tw = DMA_DATA_WIDTH_8_BITS;
+ config.group_len = find_max_prime_num(num);
+ config.trans_dir = DMA_PERH2MEM;
+ config.handshake = uart_rx_hs_num[uart->dev.idx];
+
+ ret = csi_dma_ch_config(dma, &config);
+
+ if (ret == CSI_OK) {
+
+ fcr_reg &= ~(DW_UART_FCR_RT_Msk);
+
+ if (config.group_len >= (UART_MAX_FIFO / 2U)) {
+ fcr_reg |= DW_UART_FCR_RT_FIFO_1_2_FULL;
+ } else if (config.group_len >= (UART_MAX_FIFO / 4U)) {
+ fcr_reg |= DW_UART_FCR_RT_FIFO_1_4_FULL;
+ } else {
+ fcr_reg |= DW_UART_FCR_RT_FIFO_1_CHAR;
+ }
+
+ soc_dcache_clean_invalid_range((unsigned long)uart->rx_data, uart->rx_size);
+ dw_uart_set_fcr_reg(uart_base, fcr_reg | DW_UART_FCR_RFIFOR_RESET);
+ csi_dma_ch_start(uart->rx_dma, (uint8_t *) & (uart_base->RBR), (void *)uart->rx_data, uart->rx_size);
+ }
+
+ return ret;
+}
+
+csi_error_t csi_uart_link_dma(csi_uart_t *uart, csi_dma_ch_t *tx_dma, csi_dma_ch_t *rx_dma)
+{
+ CSI_PARAM_CHK(uart, CSI_ERROR);
+ CSI_PARAM_CHK(uart->callback, CSI_ERROR);
+ csi_error_t ret = CSI_OK;
+
+ if (tx_dma != NULL) {
+ tx_dma->parent = uart;
+ ret = csi_dma_ch_alloc(tx_dma, -1, -1);
+
+ if (ret == CSI_OK) {
+ csi_dma_ch_attach_callback(tx_dma, dw_uart_dma_event_cb, NULL);
+ uart->tx_dma = tx_dma;
+ uart->send = dw_uart_send_dma;
+ } else {
+ tx_dma->parent = NULL;
+ }
+ } else {
+ if (uart->tx_dma) {
+ csi_dma_ch_detach_callback(uart->tx_dma);
+ csi_dma_ch_free(uart->tx_dma);
+ uart->tx_dma = NULL;
+ }
+
+ uart->send = dw_uart_send_intr;
+ }
+
+ if (ret != CSI_ERROR) {
+ if (rx_dma != NULL) {
+ rx_dma->parent = uart;
+ ret = csi_dma_ch_alloc(rx_dma, -1, -1);
+
+ if (ret == CSI_OK) {
+ csi_dma_ch_attach_callback(rx_dma, dw_uart_dma_event_cb, NULL);
+ uart->rx_dma = rx_dma;
+ uart->receive = dw_uart_receive_dma;
+ } else {
+ rx_dma->parent = NULL;
+ }
+ } else {
+ if (uart->rx_dma) {
+ csi_dma_ch_detach_callback(uart->rx_dma);
+ csi_dma_ch_free(uart->rx_dma);
+ uart->rx_dma = NULL;
+ }
+
+ uart->receive = dw_uart_receive_intr;
+ }
+ }
+ return ret;
+}
+
+#ifdef CONFIG_PM
+csi_error_t dw_uart_pm_action(csi_dev_t *dev, csi_pm_dev_action_t action)
+{
+ CSI_PARAM_CHK(dev, CSI_ERROR);
+
+ csi_error_t ret = CSI_OK;
+ csi_pm_dev_t *pm_dev = &dev->pm_dev;
+ dw_uart_regs_t *uart_base = (dw_uart_regs_t *)dev->reg_base;
+
+ switch (action) {
+ case PM_DEV_SUSPEND:
+ dw_uart_fifo_disable(uart_base);
+ dw_uart_fifo_enable(uart_base);
+ dw_uart_wait_idle(uart_base);
+ uart_base->LCR |= DW_UART_LCR_DLAB_EN;
+ csi_pm_dev_save_regs(pm_dev->reten_mem, (uint32_t *)dev->reg_base, 2U);
+ uart_base->LCR &= (~DW_UART_LCR_DLAB_EN);
+ csi_pm_dev_save_regs(pm_dev->reten_mem + 2, (uint32_t *)(dev->reg_base + 4U), 1U);
+ csi_pm_dev_save_regs(pm_dev->reten_mem + 2 + 1, (uint32_t *)(dev->reg_base + 12U), 2U);
+ break;
+
+ case PM_DEV_RESUME:
+ dw_uart_fifo_disable(uart_base);
+ dw_uart_fifo_enable(uart_base);
+ dw_uart_wait_idle(uart_base);
+ uart_base->LCR |= DW_UART_LCR_DLAB_EN;
+ csi_pm_dev_restore_regs(pm_dev->reten_mem, (uint32_t *)dev->reg_base, 2U);
+ uart_base->LCR &= (~DW_UART_LCR_DLAB_EN);
+ csi_pm_dev_restore_regs(pm_dev->reten_mem + 2, (uint32_t *)(dev->reg_base + 4U), 1U);
+ csi_pm_dev_restore_regs(pm_dev->reten_mem + 2 + 1, (uint32_t *)(dev->reg_base + 12U), 2U);
+ break;
+
+ default:
+ ret = CSI_ERROR;
+ break;
+ }
+
+ return ret;
+}
+
+csi_error_t csi_uart_enable_pm(csi_uart_t *uart)
+{
+ return csi_pm_dev_register(&uart->dev, dw_uart_pm_action, 20U, 0U);
+}
+
+void csi_uart_disable_pm(csi_uart_t *uart)
+{
+ csi_pm_dev_unregister(&uart->dev);
+}
+#endif
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/devices.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/devices.c
new file mode 100644
index 000000000..48011f2af
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/devices.c
@@ -0,0 +1,87 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+// #include
+// #include
+// #include
+// #include
+#include
+#include
+#include
+
+const csi_perip_info_t g_soc_info[] = {
+ {DW_UART0_BASE, DW_UART0_IRQn, 0, DEV_DW_UART_TAG},
+ {DW_TIMER0_BASE, TIM0_IRQn, 0, DEV_DW_TIMER_TAG},
+ {DW_TIMER1_BASE, TIM1_IRQn, 1, DEV_DW_TIMER_TAG},
+ {DW_TIMER2_BASE, TIM2_IRQn, 2, DEV_DW_TIMER_TAG},
+ {DW_TIMER3_BASE, TIM3_IRQn, 3, DEV_DW_TIMER_TAG},
+#if CONFIG_SUPPORT_NMI_DEMO
+ {DW_TIMER4_BASE, FAKE_IRQ_TIMER4, 4, DEV_DW_TIMER_TAG},
+#endif
+#if defined(DW_DMA0_BASE)
+ {DW_DMA0_BASE, DW_DMA0_IRQn, 0, DEV_DW_AHB_DMA_TAG},
+ {DW_DMA0_BASE, DW_DMA0_IRQn, 0, DEV_DW_AXI_DMA_TAG},
+#endif
+#if defined(XT_IOPMP0_BASE)
+ {XT_IOPMP0_BASE, IOPMP0_IRQn, 0, DEV_XT_IOPMP_TAG},
+#endif
+ {0, 0, 0, 0}
+};
+
+const csi_dma_ch_info_t g_dma_chnum[] = {
+ {0, 8},
+ {DEV_IDX_INVALID, 0},
+};
+
+const uint16_t uart_tx_hs_num[1] = {};
+const uint16_t uart_rx_hs_num[1] = {};
+
+const csi_dma_ch_desc_t uart0_dma_ch_list[] = {
+ {0xff, 0xff}
+};
+
+const csi_dma_ch_spt_list_t dma_spt_list[] = {
+ {0xFFFFU, 0xFFU, NULL},
+};
+
+const csi_pinmap_t gpio_pinmap[] = {
+ {0xFFFFFFFFU, 0xFFU, 0xFFU, 0xFFFFFFFFU },
+};
+
+const csi_pinmap_t uart_pinmap[] = {
+ {0xFFFFFFFFU, 0xFFU, 0xFFU, 0xFFFFFFFFU },
+};
+
+const csi_clkmap_t clk_map[] = {
+ {0xFFFFFFFFU, 0xFFFFU, 0xFFU}
+};
+
+const csi_dma_handshake_ctrl_t xs0_dma0_handshake_ctrl_list[] = {
+ {DEV_IDX_INVALID, DEV_BLANK_TAG, 0xFFU, 0xFFU},
+};
+
+const csi_dma_handshake_list_t g_handshake_list[] = {
+ {0, xs0_dma0_handshake_ctrl_list},
+ {DEV_IDX_INVALID, NULL},
+};
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/feature.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/feature.c
new file mode 100644
index 000000000..4895e52cc
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/feature.c
@@ -0,0 +1,311 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+
+// I/D Cache will enable in cache_init
+void cpu_features_init(void)
+{
+#if CONFIG_CPU_XUANTIE_E901PLUS_CP || CONFIG_CPU_XUANTIE_E901PLUS_B_CP || CONFIG_CPU_XUANTIE_E901PLUS_M_CP || CONFIG_CPU_XUANTIE_E901PLUS_BM_CP
+ return;
+#endif
+
+#if CONFIG_CPU_XUANTIE_E901_CP || CONFIG_CPU_XUANTIE_E901_B_CP || CONFIG_CPU_XUANTIE_E901_ZM_CP || CONFIG_CPU_XUANTIE_E901_BZM_CP
+ return;
+#endif
+
+#if CONFIG_CPU_XUANTIE_E902 || CONFIG_CPU_XUANTIE_E902M
+ return;
+#endif
+
+#if CONFIG_CPU_XUANTIE_E906 || CONFIG_CPU_XUANTIE_E906F || CONFIG_CPU_XUANTIE_E906FD || CONFIG_CPU_XUANTIE_E906P || CONFIG_CPU_XUANTIE_E906FP || CONFIG_CPU_XUANTIE_E906FDP
+ rv_csr_write(CSR_MXSTATUS, 0x440800);
+ rv_csr_write(CSR_MHCR, 0x103f & (~0x3));
+ return;
+#endif
+
+#if CONFIG_CPU_XUANTIE_E907 || CONFIG_CPU_XUANTIE_E907F || CONFIG_CPU_XUANTIE_E907FD || CONFIG_CPU_XUANTIE_E907P || CONFIG_CPU_XUANTIE_E907FP || CONFIG_CPU_XUANTIE_E907FDP
+ rv_csr_write(CSR_MXSTATUS, 0x440800);
+ rv_csr_write(CSR_MHINT, 0x600c);
+ rv_csr_write(CSR_MHCR, 0x103f & (~0x3));
+ return;
+#endif
+
+ volatile unsigned int i, cpu_type, cpu_ver, cpu_tnmodel;
+ unsigned long version[8];
+
+ /* As CPUID is a fifo register, try to find
+ * the CPUID[0] whose index(bit[31:28]) == 0 */
+ for (i = 0; i < 8; i++) {
+ version[0] = rv_csr_read(CSR_MCPUID);
+ if (((version[0]&0xf0000000) >> 28) == 0)
+ break;
+ }
+
+ for (i = 1; i < 8; i++)
+ version[i] = rv_csr_read(CSR_MCPUID);
+
+ cpu_type = (version[0] >> 18) & 0xf;
+ cpu_tnmodel = (version[0] >> 14) & 0x1;
+ cpu_ver = (version[1] >> 12) & 0xffff;
+
+ rv_csr_write(CSR_MCOR, 0x70013);
+
+ /*
+ * Warning: CSR_MCCR2 contains an L2 cache latency setting,
+ * you need to confirm it by your own soc design.
+ */
+ switch (cpu_type) {
+ case 0x1:
+ if (cpu_ver >= 0x0) {
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x1ee30c);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+ rv_csr_write(CSR_MHINT2,0x180);
+ } else {
+ while(1);
+ }
+ break;
+ case 0x2:
+ if (cpu_ver >= 0x0) {
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xa042000a);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x21aa10c);
+ rv_csr_write(CSR_MHCR, 0x10011ff & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x10000080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else {
+ while(1);
+ }
+ break;
+ case 0x3:
+ if (cpu_ver >= 0x1080 && cpu_ver <= 0x10bf) { //1.2.0~1.2.x
+ rv_csr_write(CSR_MCCR2, 0xe0010009);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x6e30c);
+ rv_csr_write(CSR_MHCR, 0x1ff & (~0x3));
+ } else if (cpu_ver == 0x10ca) { //1.3.10
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe2490009);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x66e30c);
+ rv_csr_write(CSR_MHCR, 0x17f & (~0x3));
+ rv_csr_write(CSR_MHINT2, 0x420000);
+ rv_csr_write(CSR_MHINT4, 0x410);
+ } else if (cpu_ver >= 0x1100 && cpu_ver <= 0x113f) { //1.4.0~1.4.x
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe2490009);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x16e30c);
+ rv_csr_write(CSR_MHCR, 0x1ff & (~0x3));
+ } else if (cpu_ver >= 0x1140 && cpu_ver <= 0x117f) { //1.5.0~1.5.x
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe2490009);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0xe6e30c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x1ff & (~0x3));
+ } else if (cpu_ver >= 0x1180 && cpu_ver <= 0x1183) { //1.6.0~1.6.3
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x1ee30c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x1ff & (~0x3));
+ } else if (cpu_ver >= 0x1184 && cpu_ver <= 0x123f) { //1.6.4~1.8.x
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x1ee30c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+ } else if (cpu_ver >= 0x2000 && cpu_ver <= 0x200e) { //2.0.0~2.0.14
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x31ea32c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x200f && cpu_ver <= 0x2045) { //2.0.15~2.1.5
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x11ea32c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x2046 && cpu_ver <= 0x20c3) { //2.1.6~2.3.3
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x31ea32c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x20c4 && cpu_ver <= 0x2fff) { //2.3.4~2.x.x
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x31ea32c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x2080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x3000 && cpu_ver <= 0x3fff) { //3.0.0~3.x.x
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe249000b);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x31ea32c);
+ rv_csr_write(CSR_MHINT2, 0x180);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x2080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else {
+ while(1);
+ }
+ break;
+ case 0x4:
+ if (cpu_ver >= 0x1002 && cpu_ver <= 0xffff) {
+ rv_csr_write(CSR_MHCR, 0x17f & (~0x3));
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x650c);
+ } else {
+ while(1);
+ }
+ break;
+ case 0x5:
+ if(cpu_tnmodel == 0) { //c908
+ if (cpu_ver >= 0x0000 && cpu_ver <= 0x0007) { //0.0.0~0.0.7
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xe0420008);
+ rv_csr_write(CSR_MXSTATUS, 0x638000);
+ rv_csr_write(CSR_MHINT, 0x2c50c);
+ rv_csr_write(CSR_MHCR, 0x11ff & (~0x3));
+ } else if (cpu_ver >= 0x0040 && cpu_ver <= 0x1002) { //0.1.0~1.0.2
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xa042000a);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x21aa10c);
+ rv_csr_write(CSR_MHCR, 0x10011ff & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x1003 && cpu_ver <= 0x100b) { //1.0.3~1.0.11
+
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xa042000a);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x1aa10c);
+ rv_csr_write(CSR_MHCR, 0x10011ff & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x100c && cpu_ver <= 0x1fff) { //1.0.12~
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xa042000a);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x21aa10c);
+ rv_csr_write(CSR_MHCR, 0x10011ff & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x10000080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else if (cpu_ver >= 0x2000 && cpu_ver <= 0xffff) { //2.0.0~
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xa042000a);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x21aa10c);
+ rv_csr_write(CSR_MHCR, 0x10011ff & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x10000080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else {
+ while(1);
+ }
+ } else if (cpu_tnmodel == 1) {
+ if (cpu_ver >= 0x0) {
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xA0420002);
+ rv_csr_write(CSR_MXSTATUS, 0x438100);
+ rv_csr_write(CSR_MHINT, 0x21AA10C);
+ rv_csr_write(CSR_MHCR, 0x10011FF & (~0x3));
+ rv_csr_write(CSR_MHINT4, 0x10000080);
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else {
+ while(1);
+ }
+ } else {
+ while(1);
+ }
+ break;
+ case 0x6:
+ if (cpu_ver >= 0x0) {
+ rv_csr_write(CSR_MSMPR, 0x1);
+ rv_csr_write(CSR_MCCR2, 0xA0420002);
+ rv_csr_write(CSR_MXSTATUS, 0x438000);
+ rv_csr_write(CSR_MHINT, 0x3A1AA10C);
+ rv_csr_write(CSR_MHCR, 0x10011BF & (~0x3));
+#if __riscv_xlen == 64
+ rv_csr_write(CSR_MENVCFG, 0x4000000000000000);
+#endif
+ } else {
+ while(1);
+ }
+ break;
+ case 0x7:
+ if (cpu_ver >= 0x0) {
+ rv_csr_clear(CSR_MXSTATUS, 0x1);
+ rv_csr_write(CSR_MISELECT,CSR_MNASTATUS);
+ rv_csr_write(CSR_MIREG,0x1e);
+ } else {
+ while(1);
+ }
+ break;
+ case 0x8:
+ if (cpu_ver >= 0x0) {
+ rv_csr_clear(CSR_MXSTATUS, 0x1);
+ rv_csr_write(CSR_MISELECT,CSR_MNASTATUS);
+ rv_csr_write(CSR_MIREG,0x1e);
+ } else {
+ while(1);
+ }
+ break;
+ default:
+ // FIXME: maybe qemu
+ break;
+ }
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq.c
new file mode 100644
index 000000000..dd38678ee
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq.c
@@ -0,0 +1,282 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+extern uint32_t soc_irq_get_irq_num(void);
+extern void soc_irq_end(uint32_t irq_num);
+
+#if CONFIG_AOS_OSAL
+#include
+#include
+#define CSI_INTRPT_ENTER() aos_kernel_intrpt_enter()
+#define CSI_INTRPT_EXIT() aos_kernel_intrpt_exit()
+#else
+#ifdef CONFIG_KERNEL_FREERTOS
+#include
+extern int freertos_intrpt_enter(void);
+extern int freertos_intrpt_exit(void);
+#define CSI_INTRPT_ENTER() freertos_intrpt_enter()
+#define CSI_INTRPT_EXIT() freertos_intrpt_exit()
+#elif defined(CONFIG_KERNEL_RTTHREAD)
+#include
+#define printk rt_kprintf
+extern void rt_interrupt_enter(void);
+extern void rt_interrupt_leave(void);
+#define CSI_INTRPT_ENTER() rt_interrupt_enter()
+#define CSI_INTRPT_EXIT() rt_interrupt_leave()
+#else
+#define printk printf
+#define CSI_INTRPT_ENTER()
+#define CSI_INTRPT_EXIT()
+#endif
+#endif /* end CONFIG_AOS_OSAL */
+
+
+#if CONFIG_INTC_IMSIC_APLIC
+csi_dev_t *g_cpu_irq_table[CONFIG_NR_CPUS][CONFIG_IRQ_NUM];
+volatile msi_entry_t g_msi_map[CONFIG_NR_CPUS][CONFIG_IRQ_NUM];
+#define g_irq_table g_cpu_irq_table[csi_get_cpu_id()]
+#else
+csi_dev_t *g_irq_table[CONFIG_IRQ_NUM];
+#endif
+
+#if defined(CONFIG_SMP) && CONFIG_SMP
+volatile uint32_t g_irq_nested_level[CONFIG_NR_CPUS];
+#else
+volatile uint32_t g_irq_nested_level;
+#endif
+
+/**
+ \brief register irq handler(deprecated).
+ \param[in] irq_num Number of IRQ.
+ \return None.
+*/
+void csi_irq_attach(uint32_t irq_num, void *irq_handler, csi_dev_t *dev)
+{
+#if CONFIG_INTC_IMSIC_APLIC
+ int cpu_id = csi_get_cpu_id();
+ int msi_num = csi_imsic_irqnum_alloc(cpu_id, MSI_SOURCE_APLIC, irq_num);
+ g_cpu_irq_table[cpu_id][msi_num] = dev;
+ csi_imsic_irq_attach(cpu_id, msi_num, irq_handler);
+#else
+ dev->irq_handler = irq_handler;
+ g_irq_table[irq_num] = dev;
+#endif
+}
+
+/**
+ \brief Attach irq handler2 for compatible(Recommended).
+ \param[in] irq_num Number of IRQ.
+ \param[in] irq_handler2 IRQ Handler.
+ \param[in] dev The dev to operate
+ \param[in] arg user data of irq_handler2
+ \return None.
+*/
+void csi_irq_attach2(uint32_t irq_num, void *irq_handler2, csi_dev_t *dev, void *arg)
+{
+#if CONFIG_INTC_IMSIC_APLIC
+ int cpu_id = csi_get_cpu_id();
+ int msi_num = csi_imsic_irqnum_alloc(cpu_id, MSI_SOURCE_APLIC, irq_num);
+ g_cpu_irq_table[cpu_id][msi_num] = dev;
+ csi_imsic_irq_attach2(cpu_id, msi_num, irq_handler2, arg);
+#else
+ dev->arg = arg;
+ dev->irq_handler2 = irq_handler2;
+ g_irq_table[irq_num] = dev;
+#endif
+}
+
+/**
+ \brief unregister irq handler.
+ \param[in] irq_num Number of IRQ.
+ \param[in] irq_handler IRQ Handler.
+ \return None.
+*/
+void csi_irq_detach(uint32_t irq_num)
+{
+#if CONFIG_INTC_IMSIC_APLIC
+ int msi_num = csi_aplic_get_target_eiid(APLIC_BASE, irq_num);
+ int cpu_id = csi_aplic_get_target_hart(APLIC_BASE, irq_num);
+ CSI_ASSERT(csi_imsic_irq_detach(cpu_id, msi_num) == CSI_OK);
+ CSI_ASSERT(csi_imsic_irqnum_free(cpu_id, msi_num) == CSI_OK);
+ CSI_ASSERT(g_cpu_irq_table[cpu_id][msi_num] != NULL);
+ g_cpu_irq_table[cpu_id][msi_num] = NULL;
+#else
+ g_irq_table[irq_num] = NULL;
+#endif
+}
+
+/**
+ \brief gets whether in irq context
+ \return true or false.
+*/
+bool csi_irq_context(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ return ((g_irq_nested_level[csi_get_cpu_id()] > 0U) ? true : false);
+#else
+ return ((g_irq_nested_level > 0U) ? true : false);
+#endif
+}
+
+static volatile int g_nmi_cnt;
+__attribute__((weak)) void handle_nmi_exception(void)
+{
+ g_nmi_cnt++;
+#if CONFIG_SUPPORT_NMI_DEMO
+ extern void timer_clear_irq();
+ timer_clear_irq();
+#endif
+}
+
+//FIXME: For Non CLIC mode
+extern void tick_irq_handler(void *arg);
+void CORET_IRQHandler(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]++;
+#else
+ g_irq_nested_level++;
+#endif
+ CSI_INTRPT_ENTER();
+ tick_irq_handler(NULL);
+ CSI_INTRPT_EXIT();
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]--;
+#else
+ g_irq_nested_level--;
+#endif
+}
+
+#if CONFIG_ECC_L1_ENABLE || CONFIG_ECC_L2_ENABLE
+static struct {
+ int err_cnt_l1;
+ int err_cnt_l2;
+} g_ecc_stat;
+
+void __attribute__((weak)) ecc_l1_irqhandler(void *arg)
+{
+ g_ecc_stat.err_cnt_l1++;
+
+ if (!(__get_MCER() >> 31) || (__get_MCER() & (0x1 << 30))) {
+ /* may be ecc fatal error happens */
+ while (1);
+ } else {
+ /* clear MCER EE_VLD */
+#if __riscv_xlen == 32
+ __set_MCER(0);
+ __set_MCERH(0);
+#else
+ __set_MCER(0);
+#endif
+ }
+}
+
+void __attribute__((weak)) ecc_l2_irqhandler(void *arg)
+{
+ g_ecc_stat.err_cnt_l2++;
+
+#if __riscv_xlen == 32
+ if((__get_MCER2H() >> 30) == 0x2) {
+ /* clear MCER EE_VLD */
+ __set_MCER2(0);
+ __set_MCER2H(0);
+ } else {
+ /* may be ecc fatal error happens */
+ while (1);
+ }
+#else
+ if((__get_MCER2() >> 62) == 0x2) {
+ /* clear MCER EE_VLD */
+ __set_MCER2(0);
+ } else {
+ /* may be ecc fatal error happens */
+ while (1);
+ }
+#endif
+}
+
+void ECC_L1_IRQHandler(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]++;
+#else
+ g_irq_nested_level++;
+#endif
+ CSI_INTRPT_ENTER();
+ ecc_l1_irqhandler(NULL);
+ CSI_INTRPT_EXIT();
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]--;
+#else
+ g_irq_nested_level--;
+#endif
+}
+#endif /* CONFIG_ECC_L1_ENABLE || CONFIG_ECC_L2_ENABLE */
+
+/**
+ \brief dispatching irq handlers(only handle external irq)
+ \return None.
+*/
+void do_irq(void)
+{
+ uint32_t irqn;
+
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]++;
+#else
+ g_irq_nested_level++;
+#endif
+ CSI_INTRPT_ENTER();
+ irqn = soc_irq_get_irq_num();
+
+ if (irqn > sizeof(g_irq_table) / sizeof(g_irq_table[0]) - 1 ) {
+ printk("undefined interrupt: irqn = 0x%x\n", irqn);
+ while(1);
+ }
+ if (g_irq_table[irqn]) {
+ if (g_irq_table[irqn]->irq_handler) {
+ /* for compatibility */
+ g_irq_table[irqn]->irq_handler(g_irq_table[irqn]);
+ }
+ else if (g_irq_table[irqn]->irq_handler2) {
+ g_irq_table[irqn]->irq_handler2(irqn, g_irq_table[irqn]->arg);
+ }
+ else {
+ printk("undefined interrupt2: irqn = 0x%x\n", irqn);
+ /*the interrupt has no registered isr*/
+ while(1);
+ }
+ } else {
+ printk("null irq_handler: irqn = 0x%x\n", irqn);
+ while(1);
+ }
+
+ soc_irq_end(irqn);
+ CSI_INTRPT_EXIT();
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ g_irq_nested_level[csi_get_cpu_id()]--;
+#else
+ g_irq_nested_level--;
+#endif
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq_port.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq_port.c
new file mode 100644
index 000000000..8caa0588f
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/irq_port.c
@@ -0,0 +1,147 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+
+void soc_irq_enable(uint32_t irq_num)
+{
+ csi_vic_enable_irq((int32_t)irq_num);
+}
+
+void soc_irq_disable(uint32_t irq_num)
+{
+ csi_vic_disable_irq((int32_t)irq_num);
+}
+
+bool soc_irq_is_enabled(uint32_t irq_num)
+{
+ bool ret;
+
+ if (csi_vic_get_enabled_irq((int32_t)irq_num)) {
+ ret = true;
+ } else {
+ ret = false;
+ }
+
+ return ret;
+}
+
+void soc_irq_priority(uint32_t irq_num, uint32_t priority)
+{
+ csi_vic_set_prio((int32_t)irq_num, priority);
+}
+
+/**
+ * @brief get irq vector num
+ * @return irq no
+ */
+uint32_t soc_irq_get_irq_num(void)
+{
+ int hartid = csi_get_cpu_id();
+#if CONFIG_INTC_CLIC
+ (void) hartid;
+#if CONFIG_RISCV_SMODE
+ return (__get_SCAUSE() & 0x3FFU);
+#else
+ return (__get_MCAUSE() & 0x3FFU);
+#endif /* CONFIG_RISCV_SMODE */
+#endif /* CONFIG_INTC_CLIC */
+
+#if CONFIG_INTC_PLIC || CONFIG_INTC_CLIC_PLIC
+ uint32_t num;
+#if CONFIG_RISCV_SMODE
+ uint32_t irqn = __get_SCAUSE() & 0x3FFU;
+#else
+ uint32_t irqn = __get_MCAUSE() & 0x3FFU;
+#endif /* CONFIG_RISCV_SMODE */
+ if (irqn == Machine_External_IRQn || irqn == Supervisor_External_IRQn) {
+#if CONFIG_RISCV_SMODE
+ num = PLIC_Hn_MSCLAIM_VAL(&PLIC->PLIC_H0_SCLAIM, hartid);
+#else
+ num = PLIC_Hn_MSCLAIM_VAL(&PLIC->PLIC_H0_MCLAIM, hartid);
+#endif
+#if CONFIG_INTC_CLIC_PLIC
+ num += PLIC_IRQ_OFFSET;
+#endif
+ } else {
+ num = irqn;
+ }
+ return num;
+#endif /* CONFIG_INTC_PLIC || CONFIG_INTC_CLIC_PLIC */
+
+#if CONFIG_INTC_APLIC || CONFIG_INTC_CLIC_APLIC
+ uint32_t num;
+#if CONFIG_RISCV_SMODE
+ uint32_t irqn = __get_SCAUSE() & 0x3FFU;
+#else
+ uint32_t irqn = __get_MCAUSE() & 0x3FFU;
+#endif /* CONFIG_RISCV_SMODE */
+ if (irqn == Machine_External_IRQn || irqn == Supervisor_External_IRQn) {
+ num = csi_aplic_read_claimi(APLIC_BASE, hartid);
+#if CONFIG_INTC_CLIC_APLIC
+ num += APLIC_IRQ_OFFSET;
+#endif
+ } else {
+ num = irqn;
+ }
+ return num;
+#endif /* CONFIG_INTC_APLIC || CONFIG_INTC_CLIC_APLIC */
+
+#if CONFIG_INTC_IMSIC_APLIC
+ return g_handing_msi_num[hartid];
+#endif
+}
+
+void soc_irq_end(uint32_t irq_num)
+{
+#if CONFIG_INTC_CLIC
+ // DO NOTHING
+#endif /* CONFIG_INTC_CLIC */
+
+ /**
+ * If aplic works in msi-mode
+ * and the current interrupt is level-triggered
+ * need retrigger
+ */
+#if CONFIG_INTC_IMSIC_APLIC
+ extern csi_dev_t *g_cpu_irq_table[CONFIG_NR_CPUS][CONFIG_IRQ_NUM];
+ csi_aplic_retrigger_level_irq(APLIC_BASE, g_cpu_irq_table[csi_get_cpu_id()][irq_num]->irq_num);
+#endif
+
+
+#if CONFIG_INTC_PLIC || CONFIG_INTC_CLIC_PLIC
+#if CONFIG_INTC_CLIC_PLIC
+ if (irq_num <= PLIC_IRQ_OFFSET) {
+ return;
+ }
+ irq_num -= PLIC_IRQ_OFFSET;
+#endif /* CONFIG_INTC_CLIC_PLIC */
+#if CONFIG_RISCV_SMODE
+ PLIC_Hn_MSCLAIM_VAL(&PLIC->PLIC_H0_SCLAIM, csi_get_cpu_id()) = irq_num;
+#else
+ PLIC_Hn_MSCLAIM_VAL(&PLIC->PLIC_H0_MCLAIM, csi_get_cpu_id()) = irq_num;
+#endif
+#endif /* CONFIG_INTC_PLIC || CONFIG_INTC_CLIC_PLIC */
+
+#if CONFIG_INTC_APLIC || CONFIG_INTC_CLIC_APLIC
+ // DO NOTHING
+#endif /* CONFIG_INTC_APLIC || CONFIG_INTC_CLIC_APLIC */
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/pre_main.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/pre_main.c
new file mode 100644
index 000000000..99e207c50
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/pre_main.c
@@ -0,0 +1,103 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file pre_main.c
+ * @brief source file for the pre_main
+ * @version V1.0
+ * @date 04. April 2024
+ ******************************************************************************/
+
+#include
+#include
+#include
+
+extern unsigned long __heap_start;
+extern unsigned long __heap_end;
+unsigned long g_heap_start = (unsigned long)&__heap_start;
+unsigned long g_heap_end = (unsigned long)&__heap_end;
+
+extern int main(void);
+/*
+ * The ranges of copy from/to are specified by following symbols
+ * __erodata: LMA of start of the section to copy from. Usually end of rodata
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+void section_data_copy(void)
+{
+ extern unsigned long __erodata;
+ extern unsigned long __data_start__;
+ extern unsigned long __data_end__;
+
+ if (((unsigned long)&__erodata != (unsigned long)&__data_start__)) {
+ unsigned long src_addr = (unsigned long)&__erodata;
+ memcpy((void *)(&__data_start__), \
+ (void *)src_addr, \
+ (unsigned long)(&__data_end__) - (unsigned long)(&__data_start__));
+ }
+}
+
+void section_ram_code_copy(void)
+{
+ extern unsigned long __erodata;
+ extern unsigned long __data_start__;
+ extern unsigned long __data_end__;
+ extern unsigned long __ram_code_start__;
+ extern unsigned long __ram_code_end__;
+
+ if (((unsigned long)&__erodata != (unsigned long)&__data_start__)) {
+ unsigned long src_addr = (unsigned long)&__erodata;
+ src_addr += (unsigned long)(&__data_end__) - (unsigned long)(&__data_start__);
+ memcpy((void *)(&__ram_code_start__), \
+ (void *)src_addr, \
+ (unsigned long)(&__ram_code_end__) - (unsigned long)(&__ram_code_start__));
+ }
+}
+
+/*
+ * The BSS section is specified by following symbols
+ * __bss_start__: start of the BSS section.
+ * __bss_end__: end of the BSS section.
+ *
+ * Both addresses must be aligned to 4 bytes boundary.
+ */
+void section_bss_clear(void)
+{
+ extern unsigned long __bss_start__;
+ extern unsigned long __bss_end__;
+
+ memset((void *)(&__bss_start__), \
+ 0, \
+ (unsigned long)(&__bss_end__) - (unsigned long)(&__bss_start__));
+
+}
+
+__attribute__((weak)) void pre_main(void)
+{
+#if (!defined(CONFIG_KERNEL_RHINO)) && (!defined(CONFIG_NUTTXMM_NONE)) \
+ && (!defined(CONFIG_KERNEL_FREERTOS)) && (!defined(CONFIG_KERNEL_RTTHREAD)) \
+ && (!defined(CONFIG_KERNEL_THREADX))
+ extern void mm_heap_initialize(void);
+ mm_heap_initialize();
+#endif
+
+ main();
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/sys_clk.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/sys_clk.c
new file mode 100644
index 000000000..2ef6f11e3
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/sys_clk.c
@@ -0,0 +1,100 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+// #include
+
+uint32_t g_system_clock = IHS_VALUE;
+
+#if CONFIG_BOARD_XIAOHUI_EVB
+uint32_t soc_get_cpu_freq(uint32_t idx)
+{
+#ifndef CONFIG_CPU_FREQ_HZ
+ return 50*1000000;
+#else
+ return CONFIG_CPU_FREQ_HZ;
+#endif
+}
+
+uint32_t soc_get_coretim_freq(void)
+{
+ return 25*1000000;
+}
+
+uint32_t soc_get_uart_freq(uint32_t idx)
+{
+ return 36*1000000;
+}
+
+uint32_t soc_get_timer_freq(uint32_t idx)
+{
+ return 25*1000000;
+}
+
+#else
+uint32_t soc_get_cpu_freq(uint32_t idx)
+{
+ return g_system_clock;
+}
+
+uint32_t soc_get_cur_cpu_freq(void)
+{
+ return g_system_clock;
+}
+
+uint32_t soc_get_coretim_freq(void)
+{
+ return g_system_clock;
+}
+
+uint32_t soc_get_uart_freq(uint32_t idx)
+{
+ return g_system_clock;
+}
+
+csi_error_t soc_sysclk_config(system_clk_config_t *config)
+{
+ return CSI_OK;
+}
+
+void soc_reset_uart(uint32_t idx)
+{
+}
+
+uint32_t soc_get_timer_freq(uint32_t idx)
+{
+ return g_system_clock;
+}
+#endif
+
+void soc_clk_enable(int32_t module)
+{
+}
+
+void soc_clk_disable(int32_t module)
+{
+}
+
+void soc_set_sys_freq(uint32_t val)
+{
+ g_system_clock = val;
+}
+
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/target_get.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/target_get.c
new file mode 100644
index 000000000..da53b1df7
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/target_get.c
@@ -0,0 +1,240 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file target_get.c
+ * @brief CSI Source File for target API
+ * @version V1.0
+ * @date 9. April 2020
+ ******************************************************************************/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+extern const csi_perip_info_t g_soc_info[];
+extern const csi_dma_ch_bit_spt_list_t dma_spt_list[];
+extern const csi_dma_handshake_list_t g_handshake_list[];
+
+csi_error_t target_get(csi_dev_tag_t dev_tag, uint32_t idx, csi_dev_t *dev)
+{
+ csi_error_t ret = CSI_OK;
+ csi_perip_info_t *info;
+
+ if (dev == NULL) {
+ ret = CSI_ERROR;
+ }
+
+ ///< 使用包含外设基地址,外设中断号,外设设备号,外设设备类型成员的结构体数组变量初始化info
+ info = (csi_perip_info_t *)&g_soc_info;
+
+ ///< 获取相应的设备类型和设备号
+ while (info->reg_base) {
+ if ((info->dev_tag == (uint16_t)dev_tag) && (info->idx == (uint8_t)idx)) {
+ break;
+ }
+
+ info++;
+ }
+
+ ///< 初始化设备的统一句柄:基地址,中断号,设备号,设备类型
+ if (info->reg_base == 0U) {
+ ret = CSI_ERROR;
+ }
+
+ if (ret != CSI_ERROR) {
+ dev->reg_base = info->reg_base;
+ dev->irq_num = info->irq_num;
+ dev->idx = info->idx;
+ dev->dev_tag = (uint16_t)dev_tag;
+ }
+
+ return ret;
+}
+
+uint32_t target_pin_to_devidx(pin_name_t pin_name, const csi_pinmap_t *pinmap)
+{
+ const csi_pinmap_t *map = pinmap;
+ uint32_t ret = 0xFFFFFFFFU;
+
+ while ((uint32_t)map->pin_name != 0xFFFFFFFFU) {
+ if ((map->pin_name == pin_name) && (csi_pin_get_mux(pin_name) == map->pin_func)) {
+ ret = map->idx;
+ break;
+ }
+
+ map++;
+ }
+
+ return ret;
+}
+
+uint32_t target_pin_to_channel(pin_name_t pin_name, const csi_pinmap_t *pinmap)
+{
+ const csi_pinmap_t *map = pinmap;
+ uint32_t ret = 0xFFFFFFFFU;
+
+ while ((uint32_t)map->pin_name != 0xFFFFFFFFU) {
+ if (map->pin_name == pin_name) {
+ ret = (uint32_t)map->channel;
+ break;
+ }
+
+ map++;
+ }
+
+ return ret;
+}
+
+pin_name_t target_gpio_to_pin(uint8_t gpio_idx, uint8_t channel, const csi_pinmap_t *pinmap)
+{
+ const csi_pinmap_t *map = pinmap;
+ pin_name_t ret = (pin_name_t)0xFFU;
+
+ while ((uint32_t)map->pin_name != 0xFFFFFFFFU) {
+ if ((map->idx == gpio_idx) && (map->channel == channel)) {
+ ret = map->pin_name;
+ break;
+ }
+
+ map++;
+ }
+
+ return ret;
+}
+
+csi_error_t target_get_optimal_dma_channel(void *dma_list, uint32_t ctrl_num, csi_dev_t *parent_dev, void *ch_info)
+{
+ uint32_t spt_id, ch_id;
+ uint16_t ctrl_id = 0;
+ uint16_t index = 0;
+ csi_dma_t **list = (csi_dma_t **)dma_list;
+ csi_dma_ch_desc_t *dma_ch_info = (csi_dma_ch_desc_t *)ch_info;
+
+ if (parent_dev == NULL)
+ {
+ /* the MEM2MEM mode */
+ for (ctrl_id = 0U; ctrl_id < ctrl_num; ctrl_id++)
+ {
+ if (list[ctrl_id] == NULL)
+ {
+ continue;
+ }
+
+ for (ch_id = 0U; ch_id < list[ctrl_id]->ch_num; ch_id++)
+ {
+ if (!(list[ctrl_id]->alloc_status & ((uint32_t)1 << ch_id)))
+ {
+ dma_ch_info->ch_idx = ch_id;
+ dma_ch_info->ctrl_idx = (uint8_t)ctrl_id;
+ /* find the channel */
+ return CSI_OK;
+ }
+ }
+ }
+ }
+ else
+ {
+ /* the MEM2PERH mode or PERH2MEM mode */
+ for (spt_id = 0U; dma_spt_list[spt_id].parent_dev_id != DEV_IDX_INVALID; spt_id++)
+ {
+ if ((dma_spt_list[spt_id].parent_dev_id == parent_dev->idx))
+ {
+ const csi_dma_ch_bit_desc_t *dev_ch_info = dma_spt_list[spt_id].ch_list;
+
+ for (index = 0U; dev_ch_info[index].ctrl_idx != DEV_IDX_INVALID; index++)
+ {
+ uint16_t tem_idx = dev_ch_info[index].ctrl_idx;
+ for (ch_id = 0U; ch_id < list[tem_idx]->ch_num; ch_id++)
+ {
+
+ if (!(list[tem_idx]->alloc_status & ((uint32_t)1 << ch_id)) && (dev_ch_info[index].ch_bit_info & ((uint32_t)1 << ch_id)))
+ {
+ dma_ch_info->ch_idx = ch_id;
+ dma_ch_info->ctrl_idx = (uint8_t)tem_idx;
+ return CSI_OK;
+ }
+ }
+ }
+ return CSI_ERROR;
+ }
+
+ }
+ }
+ return CSI_ERROR;
+}
+
+csi_error_t target_get_check_dma_access(uint32_t ctrl_idx, void *srcaddr, void *dstaddr, void **dma_base_src_addr, void **dma_base_dst_addr)
+{
+ *dma_base_src_addr = srcaddr;
+ *dma_base_dst_addr = dstaddr;
+ return CSI_OK;
+}
+
+csi_error_t target_get_dma_handshake(uint16_t dma_id, uint16_t dev_id, uint16_t dev_tag, uint8_t type, uint16_t *handshake)
+{
+ const csi_dma_handshake_list_t *handshake_list = &g_handshake_list[0];
+ uint16_t index = 0;
+ uint8_t dma_found_flag = 0;
+ uint8_t dev_found_flag = 0;
+
+ for (index = 0; handshake_list[index].ctrl_idx != DEV_IDX_INVALID; index++)
+ {
+ if (handshake_list[index].ctrl_idx == dma_id)
+ {
+ dma_found_flag = 0x1;
+ break;
+ }
+ }
+
+ if (!dma_found_flag)
+ {
+ return CSI_UNSUPPORTED;
+ }
+
+ const csi_dma_handshake_ctrl_t *handshake_ctrl_list = handshake_list[index].handshake_ctrl_list;
+
+ for (index = 0; handshake_ctrl_list[index].parent_dev_id != DEV_IDX_INVALID; index++)
+ {
+ if (handshake_ctrl_list[index].parent_dev_id == dev_id && handshake_ctrl_list[index].dev_tag == dev_tag)
+ {
+ if (type == DMA_HANDSHAKE_TYPE_RX && handshake_ctrl_list[index].rx_hs != DMA_HANDSHAKE_NONE)
+ {
+ *handshake = handshake_ctrl_list[index].rx_hs;
+ dev_found_flag = 0x1;
+ }
+ else if (type == DMA_HANDSHAKE_TYPE_TX && handshake_ctrl_list[index].tx_hs != DMA_HANDSHAKE_NONE)
+ {
+ *handshake = handshake_ctrl_list[index].tx_hs;
+ dev_found_flag = 0x1;
+ }
+ break;
+ }
+ }
+
+ if (!dev_found_flag)
+ {
+ return CSI_UNSUPPORTED;
+ }
+ return CSI_OK;
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/tick.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/tick.c
new file mode 100644
index 000000000..1f121916a
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/tick.c
@@ -0,0 +1,341 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define __WEAK __attribute__((weak))
+
+// from 1970-01-01 00:00:00 UTC
+static volatile uint64_t timestamp_us_offset;
+
+#if defined(CONFIG_SMP) && CONFIG_SMP
+static volatile uint32_t csi_tick[CONFIG_NR_CPUS] = {0U};
+#else
+static volatile uint32_t csi_tick = 0U;
+#endif
+static volatile uint32_t last_time_ms = 0U;
+static volatile uint64_t last_time_us = 0U;
+
+#ifdef CONFIG_TIMER_FOR_TICK
+static csi_timer_t tick_timer;
+#ifndef CONFIG_TICK_TIMER_IDX
+#define CONFIG_TICK_TIMER_IDX 0U
+#endif
+#else /* !CONFIG_TIMER_FOR_TICK */
+static csi_dev_t tick_dev;
+static volatile uint64_t timer_init_value = 0U;
+#endif
+
+void csi_tick_increase(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ csi_tick[csi_get_cpu_id()]++;
+#else
+ csi_tick++;
+#endif
+}
+
+uint32_t csi_tick_get(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ return csi_tick[csi_get_cpu_id()];
+#else
+ return csi_tick;
+#endif
+}
+
+#ifdef CONFIG_TIMER_FOR_TICK
+void tick_event_cb(csi_timer_t *timer_handle, void *arg)
+{
+ csi_tick_increase();
+#if CONFIG_AOS_OSAL
+ extern void aos_sys_tick_handler(void);
+ aos_sys_tick_handler();
+#else
+#ifdef CONFIG_KERNEL_FREERTOS
+ extern void xPortSysTickHandler(void);
+ xPortSysTickHandler();
+#elif defined(CONFIG_KERNEL_RTTHREAD)
+ extern void rt_tick_increase(void);
+ rt_tick_increase();
+#elif defined(CONFIG_KERNEL_THREADX)
+ extern void _tx_timer_interrupt(void);
+ _tx_timer_interrupt();
+#else
+#endif
+#endif /* end CONFIG_AOS_OSAL */
+}
+#else /* !CONFIG_TIMER_FOR_TICK */
+void tick_irq_handler(void *arg)
+{
+ csi_tick_increase();
+ csi_coret_config((soc_get_coretim_freq() / CONFIG_SYSTICK_HZ), tick_dev.irq_num);
+#if CONFIG_AOS_OSAL
+ extern void aos_sys_tick_handler(void);
+ aos_sys_tick_handler();
+#else
+#ifdef CONFIG_KERNEL_FREERTOS
+ extern void xPortSysTickHandler(void);
+ xPortSysTickHandler();
+#elif defined(CONFIG_KERNEL_RTTHREAD)
+ extern void rt_tick_increase(void);
+ rt_tick_increase();
+#elif defined(CONFIG_KERNEL_THREADX)
+ extern void _tx_timer_interrupt(void);
+ _tx_timer_interrupt();
+#else
+#endif
+#endif /* end CONFIG_AOS_OSAL */
+
+}
+#endif /* CONFIG_TIMER_FOR_TICK */
+
+csi_error_t csi_tick_init(void)
+{
+#if defined(CONFIG_SMP) && CONFIG_SMP
+ csi_tick[csi_get_cpu_id()] = 0;
+#else
+ csi_tick = 0U;
+#endif
+
+#ifdef CONFIG_TIMER_FOR_TICK
+ csi_error_t ret = csi_timer_init(&tick_timer, CONFIG_TICK_TIMER_IDX);
+ if (ret == CSI_OK) {
+ ret = csi_timer_attach_callback(&tick_timer, tick_event_cb, NULL);
+ if (ret == CSI_OK) {
+ ret = csi_timer_start(&tick_timer, (1000000U / CONFIG_SYSTICK_HZ));
+ }
+ }
+ return ret;
+#else /* !CONFIG_TIMER_FOR_TICK */
+#if CONFIG_RISCV_SMODE
+ tick_dev.irq_num = Supervisor_Timer_IRQn;
+#else
+ tick_dev.irq_num = CORET_IRQn;
+#endif
+#if CONFIG_CPU_XUANTIE_E9XX || CONFIG_INTC_CLIC || CONFIG_INTC_CLIC_PLIC || CONFIG_INTC_CLIC_APLIC
+ csi_vic_set_prio(tick_dev.irq_num, 2);
+ csi_irq_attach(tick_dev.irq_num, &tick_irq_handler, &tick_dev);
+#endif /* CONFIG_CPU_XUANTIE_E9XX || CONFIG_INTC_CLIC || CONFIG_INTC_CLIC_PLIC || CONFIG_INTC_CLIC_APLIC */
+ timer_init_value = csi_coret_get_value2();
+ csi_coret_reset_value2();
+ csi_coret_config((soc_get_coretim_freq() / CONFIG_SYSTICK_HZ), tick_dev.irq_num);
+ csi_coret_irq_enable();
+#endif /* CONFIG_TIMER_FOR_TICK */
+ return CSI_OK;
+}
+
+void csi_tick_uninit(void)
+{
+#ifdef CONFIG_TIMER_FOR_TICK
+ csi_timer_stop(&tick_timer);
+ csi_timer_uninit(&tick_timer);
+#else
+ csi_coret_irq_disable();
+#if CONFIG_CPU_XUANTIE_E9XX || CONFIG_INTC_CLIC_PLIC
+ csi_irq_detach(tick_dev.irq_num);
+#endif
+#endif /* CONFIG_TIMER_FOR_TICK */
+}
+
+#ifdef CONFIG_TIMER_FOR_TICK
+uint32_t csi_tick_get_ms(void)
+{
+ uint32_t time = last_time_ms, freq;
+ freq = csi_timer_get_load_value(&tick_timer) * CONFIG_SYSTICK_HZ;
+
+ while (freq) {
+ time = (csi_tick * (1000U / CONFIG_SYSTICK_HZ)) + ((csi_timer_get_load_value(&tick_timer) - csi_timer_get_remaining_value(&tick_timer)) / (freq / 1000U));
+
+ if (time >= last_time_ms) {
+ break;
+ }
+ }
+
+ last_time_ms = time;
+ return time;
+}
+
+uint64_t csi_tick_get_us(void)
+{
+ uint64_t time, freq;
+ uint32_t temp;
+ freq = soc_get_timer_freq(CONFIG_TICK_TIMER_IDX);
+
+ while (1) {
+ /* the time of coretim pass */
+ temp = csi_timer_get_load_value(&tick_timer) - csi_timer_get_remaining_value(&tick_timer);
+ time = ((uint64_t)temp * 1000U) / (freq / 1000U);
+ /* the time of csi_tick */
+ time += ((uint64_t)csi_tick * (1000000U / CONFIG_SYSTICK_HZ));
+
+ if (time >= last_time_us) {
+ break;
+ }
+ }
+
+ last_time_us = time;
+ return time;
+}
+
+static void _mdelay(void)
+{
+ uint32_t load = csi_timer_get_load_value(&tick_timer);
+ uint32_t start_r = csi_timer_get_remaining_value(&tick_timer);
+ uint32_t cur_r;
+ uint32_t cnt = (soc_get_timer_freq(CONFIG_TICK_TIMER_IDX) / 1000U);
+
+ while (1) {
+ cur_r = csi_timer_get_remaining_value(&tick_timer);
+
+ if (start_r > cur_r) {
+ if ((start_r - cur_r) >= cnt) {
+ break;
+ }
+ } else {
+ if (((load - cur_r) + start_r) >= cnt) {
+ break;
+ }
+ }
+ }
+}
+
+static void _10udelay(void)
+{
+ uint32_t load = csi_timer_get_load_value(&tick_timer);
+ uint32_t start_r = csi_timer_get_remaining_value(&tick_timer);
+ uint32_t cur_r;
+ uint32_t cnt = (soc_get_timer_freq(CONFIG_TICK_TIMER_IDX) / 100000U);
+
+ while (1) {
+ cur_r = csi_timer_get_remaining_value(&tick_timer);
+
+ if (start_r > cur_r) {
+ if ((start_r - cur_r) >= cnt) {
+ break;
+ }
+ } else {
+ if (((load - cur_r) + start_r) >= cnt) {
+ break;
+ }
+ }
+ }
+}
+
+#else /* !CONFIG_TIMER_FOR_TICK */
+
+uint32_t csi_tick_get_ms(void)
+{
+ uint32_t time;
+
+ time = (uint32_t)((csi_coret_get_value2() - timer_init_value) * 1000U / (uint64_t)soc_get_coretim_freq());
+ last_time_ms = time;
+ return time;
+}
+
+uint64_t csi_tick_get_us(void)
+{
+ uint64_t time;
+
+ time = (csi_coret_get_value2() - timer_init_value) * 1000U * 1000U / (uint64_t)soc_get_coretim_freq();
+ last_time_us = time;
+ return time;
+}
+
+static void _mdelay(void)
+{
+ uint64_t start = csi_coret_get_value2();
+ uint64_t cur;
+ uint32_t cnt = (soc_get_coretim_freq() / 1000U);
+
+ while (1) {
+ cur = csi_coret_get_value2();
+
+ if (start > cur) {
+ if ((start - cur) >= cnt) {
+ break;
+ }
+ } else {
+ if (cur - start >= cnt) {
+ break;
+ }
+ }
+ }
+}
+
+static void _10udelay(void)
+{
+ uint64_t cur;
+ uint64_t start = csi_coret_get_value2();
+ uint32_t cnt = (soc_get_coretim_freq() / 1000U / 100U);
+
+ while (1) {
+ cur = csi_coret_get_value2();
+
+ if (start > cur) {
+ if ((start - cur) >= cnt) {
+ break;
+ }
+ } else {
+ if (cur - start >= cnt) {
+ break;
+ }
+ }
+ }
+}
+#endif
+
+void csi_set_calendar_us(uint64_t timestamp)
+{
+ timestamp_us_offset = timestamp;
+}
+
+uint64_t csi_get_calendar_us(void)
+{
+ return csi_tick_get_us() + timestamp_us_offset;
+}
+
+__WEAK void mdelay(uint32_t ms)
+{
+ while (ms) {
+ ms--;
+ _mdelay();
+ }
+}
+
+/**
+ * Ps: At least delay over 10us
+*/
+void udelay(uint32_t us)
+{
+ us /= 10U;
+
+ while (us) {
+ us--;
+ _10udelay();
+ }
+}
+
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/weak.c b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/weak.c
new file mode 100644
index 000000000..d6e326552
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/chip_riscv_dummy/src/sys/weak.c
@@ -0,0 +1,58 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ * @file weak.c
+ * @brief source file for the weak
+ * @version V1.0
+ * @date 04. April 2024
+ ******************************************************************************/
+
+#include
+#include
+#include
+
+__WEAK void soc_dcache_clean_invalid_range(unsigned long addr, uint32_t size)
+{
+ csi_dcache_clean_invalid_range((unsigned long *)addr, size);
+}
+
+__WEAK void soc_dcache_clean_invalid_all(void)
+{
+ csi_dcache_clean_invalid();
+}
+
+__WEAK void soc_dcache_invalid_range(unsigned long addr, uint32_t size)
+{
+ csi_dcache_invalid_range((unsigned long *)addr, size);
+}
+
+__WEAK void soc_dcache_clean(void)
+{
+ csi_dcache_clean();
+}
+
+__WEAK void soc_icache_invalid(void)
+{
+ csi_icache_invalid();
+}
+
+__WEAK unsigned long soc_dma_address_remap(unsigned long addr)
+{
+ return addr;
+}
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/README.txt b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/README.txt
new file mode 100644
index 000000000..bb1bf4a3d
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/README.txt
@@ -0,0 +1 @@
+Just include csi_core.h!
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv32.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv32.h
new file mode 100644
index 000000000..c46e8428f
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv32.h
@@ -0,0 +1,1452 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file core_rv32.h
+ * @brief CSI RV32 Core Peripheral Access Layer Header File
+ * @version V1.0
+ * @date 01. Sep 2018
+ ******************************************************************************/
+
+#ifndef __CORE_RV32_H_GENERIC
+#define __CORE_RV32_H_GENERIC
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+ * CSI definitions
+ ******************************************************************************/
+/**
+ \ingroup RV32
+ @{
+ */
+
+#ifndef __RV32
+#define __RV32 (0x01U)
+#endif
+
+/** __FPU_USED indicates whether an FPU is used or not.
+ This core does not support an FPU at all
+*/
+#define __FPU_USED 0U
+
+#if defined ( __GNUC__ )
+#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CORE_RV32_H_GENERIC */
+
+#ifndef __CSI_GENERIC
+
+#ifndef __CORE_RV32_H_DEPENDANT
+#define __CORE_RV32_H_DEPENDANT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* check device defines and use defaults */
+#ifndef __RV32_REV
+#define __RV32_REV 0x0000U
+#endif
+
+#ifndef __VIC_PRIO_BITS
+#define __VIC_PRIO_BITS 2U
+#endif
+
+#ifndef __Vendor_SysTickConfig
+#define __Vendor_SysTickConfig 1U
+#endif
+
+#ifndef __MPU_PRESENT
+#define __MPU_PRESENT 1U
+#endif
+
+#ifndef __ICACHE_PRESENT
+#define __ICACHE_PRESENT 1U
+#endif
+
+#ifndef __DCACHE_PRESENT
+#define __DCACHE_PRESENT 1U
+#endif
+
+#include
+
+/* IO definitions (access restrictions to peripheral registers) */
+/**
+ \defgroup CSI_glob_defs CSI Global Defines
+
+ IO Type Qualifiers are used
+ \li to specify the access to peripheral variables.
+ \li for automatic generation of peripheral register debug information.
+*/
+#ifdef __cplusplus
+#define __I volatile /*!< Defines 'read only' permissions */
+#else
+#define __I volatile const /*!< Defines 'read only' permissions */
+#endif
+#define __O volatile /*!< Defines 'write only' permissions */
+#define __IO volatile /*!< Defines 'read / write' permissions */
+
+/* following defines should be used for structure members */
+#define __IM volatile const /*! Defines 'read only' structure member permissions */
+#define __OM volatile /*! Defines 'write only' structure member permissions */
+#define __IOM volatile /*! Defines 'read / write' structure member permissions */
+
+/*@} end of group RV32 */
+
+/*******************************************************************************
+ * Register Abstraction
+ Core Register contain:
+ - Core Register
+ - Core CLIC Register
+ ******************************************************************************/
+/**
+ \defgroup CSI_core_register Defines and Type Definitions
+ \brief Type definitions and defines for CK80X processor based devices.
+*/
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_CORE Status and Control Registers
+ \brief Core Register type definitions.
+ @{
+ */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_CLIC Core-Local Interrupt Controller (CLIC)
+ \brief Type definitions for the CLIC Registers
+ @{
+ */
+
+/**
+ \brief Access to the structure of a vector interrupt controller.
+ */
+typedef struct {
+ __IOM uint8_t IP; /*!< Offset: 0x000 (R/W) Interrupt set pending register */
+ __IOM uint8_t IE; /*!< Offset: 0x004 (R/W) Interrupt set enable register */
+ __IOM uint8_t ATTR; /*!< Offset: 0x008 (R/W) Interrupt set attribute register */
+ __IOM uint8_t CTL; /*!< Offset: 0x00C (R/W) Interrupt control register */
+} CLIC_INT_Control;
+
+typedef struct {
+ __IOM uint32_t CLICCFG:8; /*!< Offset: 0x000 (R/W) CLIC configure register */
+ __IM uint32_t CLICINFO;
+ __IOM uint32_t MINTTHRESH;
+ uint32_t RESERVED[1021];
+ CLIC_INT_Control CLICINT[4096];
+} CLIC_Type;
+
+#define CLIC_INFO_CLICINTCTLBITS_Pos 21U
+#define CLIC_INFO_CLICINTCTLBITS_Msk (0xFUL << CLIC_INFO_CLICINTCTLBITS_Pos)
+
+#define CLIC_INTIP_IP_Pos 0U /*!< CLIC INTIP: IP Position */
+#define CLIC_INTIP_IP_Msk (0x1UL << CLIC_INTIP_IP_Pos) /*!< CLIC INTIP: IP Mask */
+
+#define CLIC_INTIE_IE_Pos 0U /*!< CLIC INTIE: IE Position */
+#define CLIC_INTIE_IE_Msk (0x1UL << CLIC_INTIE_IE_Pos) /*!< CLIC INTIE: IE Mask */
+
+#define CLIC_INTIE_T_Pos 7U /*!< CLIC INTIE: T Position */
+#define CLIC_INTIE_T_Msk (0x1UL << CLIC_INTIE_T_Pos) /*!< CLIC INTIE: T Mask */
+
+#define CLIC_INTATTR_TRIG_Pos 1U /*!< CLIC INTATTR: TRIG Position */
+#define CLIC_INTATTR_TRIG_Msk (0x3UL << CLIC_INTATTR_TRIG_Pos) /*!< CLIC INTATTR: TRIG Mask */
+
+#define CLIC_INTATTR_SHV_Pos 0U /*!< CLIC INTATTR: SHV Position */
+#define CLIC_INTATTR_SHV_Msk (0x1UL << CLIC_INTATTR_SHV_Pos) /*!< CLIC INTATTR: SHV Mask */
+
+#define CLIC_INTCFG_NVBIT_Pos 5U /*!< CLIC INTCFG: NVBIT Position */
+#define CLIC_INTCFG_NVBIT_Msk (0x1UL << CLIC_INTCFG_NVBIT_Pos) /*!< CLIC INTCFG: NVBIT Mask */
+
+#define CLIC_INTCFG_PRIO_Pos 5U /*!< CLIC INTCFG: INTCFG Position */
+#define CLIC_INTCFG_PRIO_Msk (0x7UL << CLIC_INTCFG_PRIO_Pos) /*!< CLIC INTCFG: INTCFG Mask */
+
+#define CLIC_CLICCFG_NVBIT_Pos 0U /*!< CLIC CLICCFG: NVBIT Position */
+#define CLIC_CLICCFG_NVBIT_Msk (0x1UL << CLIC_CLICCFG_NVBIT_Pos) /*!< CLIC CLICCFG: NVBIT Mask */
+
+#define CLIC_CLICCFG_NLBIT_Pos 1U /*!< CLIC CLICCFG: NLBIT Position */
+#define CLIC_CLICCFG_NLBIT_Msk (0xFUL << CLIC_CLICCFG_NLBIT_Pos) /*!< CLIC CLICCFG: NLBIT Mask */
+
+#define CLIC_CLICCFG_NMBIT_Pos 5U /*!< CLIC CLICCFG: NMBIT Position */
+#define CLIC_CLICCFG_NMBIT_Msk (0x3UL << CLIC_CLICCFG_NMBIT_Pos) /*!< CLIC CLICCFG: NMBIT Mask */
+
+/*@} end of group CSI_CLIC */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_PMP Physical Memory Protection (PMP)
+ \brief Type definitions for the PMP Registers
+ @{
+ */
+
+#define PMP_PMPCFG_R_Pos 0U /*!< PMP PMPCFG: R Position */
+#define PMP_PMPCFG_R_Msk (0x1UL << PMP_PMPCFG_R_Pos) /*!< PMP PMPCFG: R Mask */
+
+#define PMP_PMPCFG_W_Pos 1U /*!< PMP PMPCFG: W Position */
+#define PMP_PMPCFG_W_Msk (0x1UL << PMP_PMPCFG_W_Pos) /*!< PMP PMPCFG: W Mask */
+
+#define PMP_PMPCFG_X_Pos 2U /*!< PMP PMPCFG: X Position */
+#define PMP_PMPCFG_X_Msk (0x1UL << PMP_PMPCFG_X_Pos) /*!< PMP PMPCFG: X Mask */
+
+#define PMP_PMPCFG_A_Pos 3U /*!< PMP PMPCFG: A Position */
+#define PMP_PMPCFG_A_Msk (0x3UL << PMP_PMPCFG_A_Pos) /*!< PMP PMPCFG: A Mask */
+
+#define PMP_PMPCFG_L_Pos 7U /*!< PMP PMPCFG: L Position */
+#define PMP_PMPCFG_L_Msk (0x1UL << PMP_PMPCFG_L_Pos) /*!< PMP PMPCFG: L Mask */
+
+typedef enum {
+ REGION_SIZE_4B = -1,
+ REGION_SIZE_8B = 0,
+ REGION_SIZE_16B = 1,
+ REGION_SIZE_32B = 2,
+ REGION_SIZE_64B = 3,
+ REGION_SIZE_128B = 4,
+ REGION_SIZE_256B = 5,
+ REGION_SIZE_512B = 6,
+ REGION_SIZE_1KB = 7,
+ REGION_SIZE_2KB = 8,
+ REGION_SIZE_4KB = 9,
+ REGION_SIZE_8KB = 10,
+ REGION_SIZE_16KB = 11,
+ REGION_SIZE_32KB = 12,
+ REGION_SIZE_64KB = 13,
+ REGION_SIZE_128KB = 14,
+ REGION_SIZE_256KB = 15,
+ REGION_SIZE_512KB = 16,
+ REGION_SIZE_1MB = 17,
+ REGION_SIZE_2MB = 18,
+ REGION_SIZE_4MB = 19,
+ REGION_SIZE_8MB = 20,
+ REGION_SIZE_16MB = 21,
+ REGION_SIZE_32MB = 22,
+ REGION_SIZE_64MB = 23,
+ REGION_SIZE_128MB = 24,
+ REGION_SIZE_256MB = 25,
+ REGION_SIZE_512MB = 26,
+ REGION_SIZE_1GB = 27,
+ REGION_SIZE_2GB = 28,
+ REGION_SIZE_4GB = 29,
+ REGION_SIZE_8GB = 30,
+ REGION_SIZE_16GB = 31
+} region_size_e;
+
+typedef enum {
+ ADDRESS_MATCHING_TOR = 1,
+ ADDRESS_MATCHING_NAPOT = 3
+} address_matching_e;
+
+typedef struct {
+ uint32_t r: 1; /* readable enable */
+ uint32_t w: 1; /* writeable enable */
+ uint32_t x: 1; /* execable enable */
+ address_matching_e a: 2; /* address matching mode */
+ uint32_t reserved: 2; /* reserved */
+ uint32_t l: 1; /* lock enable */
+} pmp_region_attr_t;
+
+/*@} end of group CSI_PMP */
+
+/* CACHE Register Definitions */
+#define CACHE_MHCR_BTB_Pos 12U /*!< CACHE MHCR: BTB Position */
+#define CACHE_MHCR_BTB_Msk (0x1UL << CACHE_MHCR_BTB_Pos) /*!< CACHE MHCR: WA Mask */
+
+#define CACHE_MHCR_BPE_Pos 5U /*!< CACHE MHCR: BPE Position */
+#define CACHE_MHCR_BPE_Msk (0x1UL << CACHE_MHCR_BPE_Pos) /*!< CACHE MHCR: BPE Mask */
+
+#define CACHE_MHCR_RS_Pos 4U /*!< CACHE MHCR: RS Position */
+#define CACHE_MHCR_RS_Msk (0x1UL << CACHE_MHCR_RS_Pos) /*!< CACHE MHCR: RS Mask */
+
+#define CACHE_MHCR_WA_Pos 3U /*!< CACHE MHCR: WA Position */
+#define CACHE_MHCR_WA_Msk (0x1UL << CACHE_MHCR_WA_Pos) /*!< CACHE MHCR: WA Mask */
+
+#define CACHE_MHCR_WB_Pos 2U /*!< CACHE MHCR: WB Position */
+#define CACHE_MHCR_WB_Msk (0x1UL << CACHE_MHCR_WB_Pos) /*!< CACHE MHCR: WB Mask */
+
+#define CACHE_MHCR_DE_Pos 1U /*!< CACHE MHCR: DE Position */
+#define CACHE_MHCR_DE_Msk (0x1UL << CACHE_MHCR_DE_Pos) /*!< CACHE MHCR: DE Mask */
+
+#define CACHE_MHCR_IE_Pos 0U /*!< CACHE MHCR: IE Position */
+#define CACHE_MHCR_IE_Msk (0x1UL << CACHE_MHCR_IE_Pos) /*!< CACHE MHCR: IE Mask */
+
+#if CONFIG_CPU_XUANTIE_E902 || CONFIG_CPU_XUANTIE_E902M || CONFIG_CPU_XUANTIE_E902T || CONFIG_CPU_XUANTIE_E902MT \
+ || CONFIG_CPU_XUANTIE_E901PLUS_CP || CONFIG_CPU_XUANTIE_E901PLUS_B_CP || CONFIG_CPU_XUANTIE_E901PLUS_M_CP || CONFIG_CPU_XUANTIE_E901PLUS_BM_CP \
+ || CONFIG_CPU_XUANTIE_E901_CP || CONFIG_CPU_XUANTIE_E901_B_CP || CONFIG_CPU_XUANTIE_E901_ZM_CP || CONFIG_CPU_XUANTIE_E901_BZM_CP
+#define CACHE_INV_ADDR_Pos 4U
+#else
+#define CACHE_INV_ADDR_Pos 5U
+#endif
+#define CACHE_INV_ADDR_Msk (0xFFFFFFFFUL << CACHE_INV_ADDR_Pos)
+
+/*@} end of group CSI_CACHE */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_SYSMAP system map (SYSMAP)
+ \brief Type definitions for the SYSMAP Registers
+ @{
+ */
+
+#define SYSMAP_SYSMAPCFG_B_Pos 0U /*!< SYSMAP SYSMAPCFG: B Position */
+#define SYSMAP_SYSMAPCFG_B_Msk (0x1UL << SYSMAP_SYSMAPCFG_B_Pos) /*!< SYSMAP SYSMAPCFG: B Mask */
+
+#define SYSMAP_SYSMAPCFG_C_Pos 1U /*!< SYSMAP SYSMAPCFG: C Position */
+#define SYSMAP_SYSMAPCFG_C_Msk (0x1UL << SYSMAP_SYSMAPCFG_C_Pos) /*!< SYSMAP SYSMAPCFG: C Mask */
+
+#define SYSMAP_SYSMAPCFG_SO_Pos 2U /*!< SYSMAP SYSMAPCFG: SO Position */
+#define SYSMAP_SYSMAPCFG_SO_Msk (0x1UL << SYSMAP_SYSMAPCFG_SO_Pos) /*!< SYSMAP SYSMAPCFG: SO Mask */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_SYSMAP system map (SYSMAP)
+ \brief Type definitions for the SYSMAP Registers
+ @{
+ */
+typedef struct {
+ __IOM uint32_t SYSMAPADDR0; /*!< Offset: 0x000 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG0; /*!< Offset: 0x004 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR1; /*!< Offset: 0x008 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG1; /*!< Offset: 0x00c (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR2; /*!< Offset: 0x010 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG2; /*!< Offset: 0x014 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR3; /*!< Offset: 0x018 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG3; /*!< Offset: 0x01c (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR4; /*!< Offset: 0x020 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG4; /*!< Offset: 0x024 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR5; /*!< Offset: 0x028 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG5; /*!< Offset: 0x02c (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR6; /*!< Offset: 0x030 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG6; /*!< Offset: 0x034 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPADDR7; /*!< Offset: 0x038 (R/W) SYSMAP configure register */
+ __IOM uint32_t SYSMAPCFG7; /*!< Offset: 0x03c (R/W) SYSMAP configure register */
+} SYSMAP_Type;
+
+
+/*@} end of group CSI_SYSMAP */
+
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_SysTick System Tick Timer (CORET)
+ \brief Type definitions for the System Timer Registers.
+ @{
+ */
+
+/**
+ \brief The data structure of the access system timer.
+ */
+typedef struct {
+ __IOM unsigned long long MTIMECMP; /*!< Offset: 0x000 (R/W) Timer compare register */
+ uint32_t RESERVED[8188];
+ __IM unsigned long long MTIME; /*!< Offset: 0x7FF8 (R) Timer current register */
+} CORET_Type;
+
+/*@} end of group CSI_SysTick */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_DCC
+ \brief Type definitions for the DCC.
+ @{
+ */
+
+/**
+ \brief Access to the data structure of DCC.
+ */
+typedef struct {
+ uint32_t RESERVED0[13U];
+ __IOM uint32_t HCR; /*!< Offset: 0x034 (R/W) */
+ __IM uint32_t EHSR; /*!< Offset: 0x03C (R/ ) */
+ uint32_t RESERVED1[6U];
+ union {
+ __IM uint32_t DERJW; /*!< Offset: 0x058 (R/ ) Data exchange register CPU read*/
+ __OM uint32_t DERJR; /*!< Offset: 0x058 ( /W) Data exchange register CPU writer*/
+ };
+
+} DCC_Type;
+
+#define DCC_HCR_JW_Pos 18U /*!< DCC HCR: jw_int_en Position */
+#define DCC_HCR_JW_Msk (1UL << DCC_HCR_JW_Pos) /*!< DCC HCR: jw_int_en Mask */
+
+#define DCC_HCR_JR_Pos 19U /*!< DCC HCR: jr_int_en Position */
+#define DCC_HCR_JR_Msk (1UL << DCC_HCR_JR_Pos) /*!< DCC HCR: jr_int_en Mask */
+
+#define DCC_EHSR_JW_Pos 1U /*!< DCC EHSR: jw_vld Position */
+#define DCC_EHSR_JW_Msk (1UL << DCC_EHSR_JW_Pos) /*!< DCC EHSR: jw_vld Mask */
+
+#define DCC_EHSR_JR_Pos 2U /*!< DCC EHSR: jr_vld Position */
+#define DCC_EHSR_JR_Msk (1UL << DCC_EHSR_JR_Pos) /*!< DCC EHSR: jr_vld Mask */
+
+/*@} end of group CSI_DCC */
+
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_core_bitfield Core register bit field macros
+ \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
+ @{
+ */
+
+/**
+ \brief Mask and shift a bit field value for use in a register bit range.
+ \param[in] field Name of the register bit field.
+ \param[in] value Value of the bit field.
+ \return Masked and shifted value.
+*/
+#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk)
+
+/**
+ \brief Mask and shift a register value to extract a bit filed value.
+ \param[in] field Name of the register bit field.
+ \param[in] value Value of register.
+ \return Masked and shifted bit field value.
+*/
+#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos)
+
+/*@} end of group CSI_core_bitfield */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_core_base Core Definitions
+ \brief Definitions for base addresses, unions, and structures.
+ @{
+ */
+
+/* Memory mapping of THEAD CPU */
+#ifndef CONFIG_TCIP_BASE
+#define CONFIG_TCIP_BASE 0xE0000000UL
+#endif
+#define CORET_BASE (CONFIG_TCIP_BASE + 0x4000UL) /*!< CORET Base Address */
+#define CLIC_BASE (CONFIG_TCIP_BASE + 0x800000UL) /*!< CLIC Base Address */
+
+#define SYSMAP_BASE (0xEFFFF000UL) /*!< SYSMAP Base Address */
+
+#define CORET ((CORET_Type *) CORET_BASE ) /*!< SysTick configuration struct */
+#define CLIC ((CLIC_Type *) CLIC_BASE ) /*!< CLIC configuration struct */
+#define SYSMAP ((SYSMAP_Type *) SYSMAP_BASE ) /*!< SYSMAP configuration struct */
+
+/*@} */
+
+/*******************************************************************************
+ * Hardware Abstraction Layer
+ Core Function Interface contains:
+ - Core VIC Functions
+ - Core CORET Functions
+ - Core Register Access Functions
+ ******************************************************************************/
+/**
+ \defgroup CSI_Core_FunctionInterface Functions and Instructions Reference
+*/
+
+/**
+ \brief Get current hartid
+ \return hartid
+ */
+__STATIC_INLINE int csi_get_cpu_id(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mhartid" : "=r"(result) : : "memory");
+ return result;
+}
+
+/**
+ \brief Get cache line size
+ \return cache line size
+ */
+__STATIC_INLINE int csi_get_cache_line_size(void)
+{
+#if CONFIG_CPU_XUANTIE_E902 || CONFIG_CPU_XUANTIE_E902M || CONFIG_CPU_XUANTIE_E902T || CONFIG_CPU_XUANTIE_E902MT \
+ || CONFIG_CPU_XUANTIE_E901PLUS_CP || CONFIG_CPU_XUANTIE_E901PLUS_B_CP || CONFIG_CPU_XUANTIE_E901PLUS_M_CP || CONFIG_CPU_XUANTIE_E901PLUS_BM_CP \
+ || CONFIG_CPU_XUANTIE_E901_CP || CONFIG_CPU_XUANTIE_E901_B_CP || CONFIG_CPU_XUANTIE_E901_ZM_CP || CONFIG_CPU_XUANTIE_E901_BZM_CP
+ return 16;
+#else
+ return 32;
+#endif
+}
+
+/* ########################## VIC functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_VICFunctions VIC Functions
+ \brief Functions that manage interrupts and exceptions via the VIC.
+ @{
+ */
+
+/* The following MACROS handle generation of the register offset and byte masks */
+#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL)
+#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 5UL) )
+#define _IP2_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) )
+
+/**
+ \brief Enable External Interrupt
+ \details Enable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_enable_irq(int32_t IRQn)
+{
+ CLIC->CLICINT[IRQn].IE |= CLIC_INTIE_IE_Msk;
+ __DSB();
+}
+
+/**
+ \brief Disable External Interrupt
+ \details Disable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_disable_irq(int32_t IRQn)
+{
+ CLIC->CLICINT[IRQn].IE &= ~CLIC_INTIE_IE_Msk;
+ __DSB();
+}
+
+/**
+ \brief Check Interrupt is Enabled or not
+ \details Read the enabled register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn Interrupt number.
+ \return 0 Interrupt status is not enabled.
+ \return 1 Interrupt status is enabled.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_enabled_irq(int32_t IRQn)
+{
+ return (uint32_t)(CLIC->CLICINT[IRQn].IE & CLIC_INTIE_IE_Msk);
+}
+
+/**
+ \brief Check Interrupt is Pending or not
+ \details Read the pending register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn Interrupt number.
+ \return 0 Interrupt status is not pending.
+ \return 1 Interrupt status is pending.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_pending_irq(int32_t IRQn)
+{
+ return (uint32_t)(CLIC->CLICINT[IRQn].IP & CLIC_INTIP_IP_Msk);
+}
+
+/**
+ \brief Set Pending Interrupt
+ \details Set the pending bit of an external interrupt.
+ \param [in] IRQn Interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_set_pending_irq(int32_t IRQn)
+{
+ CLIC->CLICINT[IRQn].IP |= CLIC_INTIP_IP_Msk;
+ __DSB();
+}
+
+/**
+ \brief Clear Pending Interrupt
+ \details Clear the pending bit of an external interrupt.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_clear_pending_irq(int32_t IRQn)
+{
+ CLIC->CLICINT[IRQn].IP &= ~CLIC_INTIP_IP_Msk;
+ __DSB();
+}
+
+/**
+ \brief Set Interrupt Priority
+ \details Set the priority of an interrupt.
+ \note The priority cannot be set for every core interrupt.
+ \param [in] IRQn Interrupt number.
+ \param [in] priority Priority to set.
+ */
+__STATIC_INLINE void csi_vic_set_prio(int32_t IRQn, uint32_t priority)
+{
+ uint8_t nlbits = (CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos;
+ uint8_t ctl = CLIC->CLICINT[IRQn].CTL;
+ ctl <<= nlbits;
+ ctl >>= nlbits;
+ CLIC->CLICINT[IRQn].CTL = ctl | (priority << (8 - nlbits));
+ __DSB();
+}
+
+/**
+ \brief Get Interrupt Priority
+ \details Read the priority of an interrupt.
+ The interrupt number can be positive to specify an external (device specific) interrupt,
+ or negative to specify an internal (core) interrupt.
+ \param [in] IRQn Interrupt number.
+ \return Interrupt Priority.
+ Value is aligned automatically to the implemented priority bits of the microcontroller.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_prio(int32_t IRQn)
+{
+ uint8_t nlbits = (CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos;
+ return CLIC->CLICINT[IRQn].CTL >> (8 - nlbits);
+}
+
+/**
+ \brief Get Interrupt thresh
+ \details Read the thresh of interrupt
+ Only the interrupt priority is greater than the value of thresh, the interrupt can be responded to
+ \return Interrupt thresh value(0~255).
+ Value is aligned automatically to the implemented priority bits of the microcontroller.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_thresh(void)
+{
+ return CLIC->MINTTHRESH >> 24;
+}
+
+/**
+ \brief Set Interrupt thresh
+ \details Write the thresh of interrupt
+ Only the interrupt priority is greater than the value of thresh, the interrupt can be responded to
+ \param [in] Interrupt thresh value(0~255).
+ */
+__STATIC_INLINE uint32_t csi_vic_set_thresh(uint32_t thresh)
+{
+ uint32_t temp = CLIC->MINTTHRESH;
+ uint8_t nlbits = (CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos;
+
+ if(!nlbits)
+ CLIC->MINTTHRESH = 0xff << 24;
+
+ CLIC->MINTTHRESH = thresh << 24;
+ __DSB();
+ return temp;
+}
+
+/*@} end of CSI_Core_VICFunctions */
+
+/* ########################## PMP functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_PMPFunctions PMP Functions
+ \brief Functions that manage interrupts and exceptions via the VIC.
+ @{
+ */
+
+/**
+ \brief configure physical memory protection region.
+ \details
+ \param [in] idx memory protection region (0, 1, 2, ..., 15).
+ \param [in] base_addr base address must be aligned with page size.
+ \param [in] size \ref region_size_e. memory protection region size.
+ \param [in] attr \ref pmp_region_attr_t. memory protection region attribute.
+ \param [in] enable enable or disable memory protection region.
+ */
+__STATIC_INLINE void csi_pmp_config_region(uint32_t idx, unsigned long base_addr, region_size_e size,
+ pmp_region_attr_t attr, uint32_t enable)
+{
+ uint8_t pmpxcfg = 0;
+ uint32_t addr = 0;
+
+ if (idx > 15) {
+ return;
+ }
+
+ if (!enable) {
+ attr.a = (address_matching_e)0;
+ }
+
+ if (attr.a == ADDRESS_MATCHING_TOR) {
+ addr = base_addr >> 2;
+ } else {
+ if (size == REGION_SIZE_4B) {
+ addr = base_addr >> 2;
+ attr.a = (address_matching_e)2;
+ } else {
+ addr = ((base_addr >> 2) & (0xFFFFFFFFU - ((1 << (size + 1)) - 1))) | ((1 << size) - 1);
+ }
+ }
+
+ __set_PMPADDRx(idx, addr);
+
+ pmpxcfg |= (attr.r << PMP_PMPCFG_R_Pos) | (attr.w << PMP_PMPCFG_W_Pos) |
+ (attr.x << PMP_PMPCFG_X_Pos) | (attr.a << PMP_PMPCFG_A_Pos) |
+ (attr.l << PMP_PMPCFG_L_Pos);
+
+ __set_PMPxCFG(idx, pmpxcfg);
+}
+
+/**
+ \brief disable physical memory protection region by idx.
+ \details
+ \param [in] idx memory protection region (0, 1, 2, ..., 15).
+ */
+__STATIC_INLINE void csi_pmp_disable_region(uint32_t idx)
+{
+ __set_PMPxCFG(idx, __get_PMPxCFG(idx) & (~PMP_PMPCFG_A_Msk));
+}
+
+/*@} end of CSI_Core_PMPFunctions */
+
+/* ################################## SysTick function ############################################ */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_SysTickFunctions SysTick Functions
+ \brief Functions that configure the System.
+ @{
+ */
+
+__STATIC_INLINE uint32_t _csi_coret_config(unsigned long coret_base, uint64_t ticks, int32_t IRQn)
+{
+ CORET_Type *coret = (CORET_Type *)coret_base;
+ if ((coret->MTIMECMP != 0) && (coret->MTIMECMP != 0xFFFFFFFFFFFFFFFFULL)) {
+ coret->MTIMECMP = coret->MTIMECMP + ticks;
+ } else {
+ coret->MTIMECMP = coret->MTIME + ticks;
+ }
+ return (0UL);
+}
+
+/**
+ \brief CORE timer Configuration
+ \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
+ Counter is in free running mode to generate periodic interrupts.
+ \param [in] ticks Number of ticks between two interrupts.
+ \param [in] IRQn core timer Interrupt number.
+ \return 0 Function succeeded.
+ \return 1 Function failed.
+ \note When the variable __Vendor_SysTickConfig is set to 1, then the
+ function SysTick_Config is not included. In this case, the file device.h
+ must contain a vendor-specific implementation of this function.
+ */
+__STATIC_INLINE uint32_t csi_coret_config(uint64_t ticks, int32_t IRQn)
+{
+ return _csi_coret_config(CORET_BASE, ticks, IRQn);
+}
+
+/**
+ \brief get CORE timer reload value
+ \return CORE timer counter value(64bit).
+ */
+__STATIC_INLINE uint64_t csi_coret_get_load2(void)
+{
+ return CORET->MTIMECMP;
+}
+
+/**
+ \brief get CORE timer reload value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE unsigned long csi_coret_get_load(void)
+{
+ return CORET->MTIMECMP & 0xFFFFFFFF;
+}
+
+/**
+ \brief get CORE timer reload high value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint32_t csi_coret_get_loadh(void)
+{
+ return (CORET->MTIMECMP >> 32) & 0xFFFFFFFF;
+}
+
+/**
+ \brief get CORE timer counter value
+ \return CORE timer counter value(64bit).
+ */
+__STATIC_INLINE uint64_t csi_coret_get_value2(void)
+{
+ return CORET->MTIME;
+}
+
+/**
+ \brief get CORE timer counter value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE unsigned long csi_coret_get_value(void)
+{
+ return CORET->MTIME & 0xFFFFFFFF;
+}
+
+/**
+ \brief get CORE timer counter high value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint32_t csi_coret_get_valueh(void)
+{
+ return (CORET->MTIME >> 32) & 0xFFFFFFFF;
+}
+
+__STATIC_INLINE void csi_coret_reset_value2()
+{
+ CORET_Type *coret = (CORET_Type *)CORET_BASE;
+ coret->MTIMECMP = 0;
+}
+
+/**
+ \brief Enable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void csi_coret_irq_enable(void)
+{
+ extern void soc_irq_enable(uint32_t irq_num);
+ return soc_irq_enable(7);
+}
+
+/**
+ \brief Disable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void csi_coret_irq_disable(void)
+{
+ extern void soc_irq_disable(uint32_t irq_num);
+ return soc_irq_disable(7);
+}
+
+/*@} end of CSI_Core_SysTickFunctions */
+
+/* ########################## SYSMAP functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_SYSMAPFunctions SYSMAP Functions
+ \brief Functions that manage system map attribute
+ @{
+ */
+
+/**
+ \brief Get SYSMAPCFGx Register by index
+ \details Returns the content of the SYSMAPxCFG Register.
+ \param [in] idx SYSMAP region index
+ \return SYSMAPxCFG Register value
+ */
+__STATIC_INLINE uint8_t __get_SYSMAPCFGx(uint32_t idx)
+{
+ switch (idx) {
+ case 0:
+ return SYSMAP->SYSMAPCFG0;
+ case 1:
+ return SYSMAP->SYSMAPCFG1;
+ case 2:
+ return SYSMAP->SYSMAPCFG2;
+ case 3:
+ return SYSMAP->SYSMAPCFG3;
+ case 4:
+ return SYSMAP->SYSMAPCFG4;
+ case 5:
+ return SYSMAP->SYSMAPCFG5;
+ case 6:
+ return SYSMAP->SYSMAPCFG6;
+ case 7:
+ return SYSMAP->SYSMAPCFG7;
+ default:
+ return 0;
+ }
+}
+
+/**
+ \brief Set SYSMAPCFGx by index
+ \details Writes the given value to the SYSMAPxCFG Register.
+ \param [in] idx SYSMAPx region index
+ \param [in] sysmapxcfg SYSMAPxCFG Register value to set
+ */
+__STATIC_INLINE void __set_SYSMAPCFGx(uint32_t idx, uint32_t sysmapxcfg)
+{
+ switch (idx) {
+ case 0:
+ SYSMAP->SYSMAPCFG0 = sysmapxcfg;
+ break;
+ case 1:
+ SYSMAP->SYSMAPCFG1 = sysmapxcfg;
+ break;
+ case 2:
+ SYSMAP->SYSMAPCFG2 = sysmapxcfg;
+ break;
+ case 3:
+ SYSMAP->SYSMAPCFG3 = sysmapxcfg;
+ break;
+ case 4:
+ SYSMAP->SYSMAPCFG4 = sysmapxcfg;
+ break;
+ case 5:
+ SYSMAP->SYSMAPCFG5 = sysmapxcfg;
+ break;
+ case 6:
+ SYSMAP->SYSMAPCFG6 = sysmapxcfg;
+ break;
+ case 7:
+ SYSMAP->SYSMAPCFG7 = sysmapxcfg;
+ break;
+ default:
+ return;
+ }
+}
+
+/**
+ \brief Get SYSMAPADDRx Register by index
+ \details Returns the content of the SYSMAPADDRx Register.
+ \param [in] idx SYSMAP region index
+ \return SYSMAPADDRx Register value
+ */
+__STATIC_INLINE uint32_t __get_SYSMAPADDRx(uint32_t idx)
+{
+ switch(idx) {
+ case 0:
+ return SYSMAP->SYSMAPADDR0;
+ case 1:
+ return SYSMAP->SYSMAPADDR1;
+ case 2:
+ return SYSMAP->SYSMAPADDR2;
+ case 3:
+ return SYSMAP->SYSMAPADDR3;
+ case 4:
+ return SYSMAP->SYSMAPADDR4;
+ case 5:
+ return SYSMAP->SYSMAPADDR5;
+ case 6:
+ return SYSMAP->SYSMAPADDR6;
+ case 7:
+ return SYSMAP->SYSMAPADDR7;
+ default:
+ return 0;
+ }
+}
+
+/**
+ \brief Set SYSMAPADDRx by index
+ \details Writes the given value to the SYSMAPADDRx Register.
+ \param [in] idx SYSMAP region index
+ \param [in] sysmapaddr SYSMAPADDRx Register value to set
+ */
+__STATIC_INLINE void __set_SYSMAPADDRx(uint32_t idx, uint32_t sysmapxaddr)
+{
+ switch (idx) {
+ case 0:
+ SYSMAP->SYSMAPADDR0 = sysmapxaddr;
+ break;
+ case 1:
+ SYSMAP->SYSMAPADDR1 = sysmapxaddr;
+ break;
+ case 2:
+ SYSMAP->SYSMAPADDR2 = sysmapxaddr;
+ break;
+ case 3:
+ SYSMAP->SYSMAPADDR3 = sysmapxaddr;
+ break;
+ case 4:
+ SYSMAP->SYSMAPADDR4 = sysmapxaddr;
+ break;
+ case 5:
+ SYSMAP->SYSMAPADDR5 = sysmapxaddr;
+ break;
+ case 6:
+ SYSMAP->SYSMAPADDR6 = sysmapxaddr;
+ break;
+ case 7:
+ SYSMAP->SYSMAPADDR7 = sysmapxaddr;
+ break;
+ default:
+ return;
+ }
+}
+
+/**
+ \brief configure system map attribute.
+ \details
+ \param [in] idx system map region (0, 1, 2, ..., 7).
+ \param [in] base_addr base address must be aligned with page size.
+ \param [in] enable enable or disable memory protected region.
+ */
+__STATIC_INLINE void csi_sysmap_config_region(uint32_t idx, uint32_t base_addr, uint32_t attr)
+{
+ uint32_t addr = 0;
+
+ if (idx > 7) {
+ return;
+ }
+
+ addr = base_addr >> 12;
+ attr = attr << 2;
+
+ __set_SYSMAPADDRx(idx, addr);
+ __set_SYSMAPCFGx(idx, attr);
+}
+
+/*@} end of CSI_Core_SYSMAPFunctions */
+
+/* ########################## Cache functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_CacheFunctions Cache Functions
+ \brief Functions that configure Instruction and Data cache.
+ @{
+ */
+
+/**
+ \brief whether I-Cache enable
+ */
+__STATIC_INLINE int csi_icache_is_enable()
+{
+ uint32_t cache = __get_MHCR();
+ return (cache & CACHE_MHCR_IE_Msk) >> CACHE_MHCR_IE_Pos;
+}
+
+/**
+ \brief Enable I-Cache
+ \details Turns on I-Cache
+ */
+__STATIC_INLINE void csi_icache_enable (void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ if (!csi_icache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ __ICACHE_IALL();
+ cache = __get_MHCR();
+ cache |= CACHE_MHCR_IE_Msk;
+ __set_MHCR(cache);
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Disable I-Cache
+ \details Turns off I-Cache
+ */
+__STATIC_INLINE void csi_icache_disable (void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ if (csi_icache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ cache = __get_MHCR();
+ cache &= ~CACHE_MHCR_IE_Msk; /* disable icache */
+ __set_MHCR(cache);
+ __ICACHE_IALL(); /* invalidate all icache */
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Invalidate I-Cache
+ \details Invalidates I-Cache
+ */
+__STATIC_INLINE void csi_icache_invalid (void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ __DSB();
+ __ICACHE_IALL(); /* invalidate all icache */
+ __DSB();
+#endif
+}
+
+/**
+ \brief whether D-Cache enable
+ */
+__STATIC_INLINE int csi_dcache_is_enable()
+{
+ uint32_t cache = __get_MHCR();
+ return (cache & CACHE_MHCR_DE_Msk) >> CACHE_MHCR_DE_Pos;
+}
+
+/**
+ \brief Enable D-Cache
+ \details Turns on D-Cache
+ */
+__STATIC_INLINE void csi_dcache_enable (void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ if (!csi_dcache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ __DCACHE_IALL(); /* invalidate all dcache */
+ cache = __get_MHCR();
+ cache |= CACHE_MHCR_DE_Msk; /* enable dcache */
+ __set_MHCR(cache);
+
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Disable D-Cache
+ \details Turns off D-Cache
+ */
+__STATIC_INLINE void csi_dcache_disable (void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ if (csi_dcache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ cache = __get_MHCR();
+ cache &= ~(uint32_t)CACHE_MHCR_DE_Msk; /* disable all Cache */
+ __set_MHCR(cache);
+ __DCACHE_IALL(); /* invalidate all Cache */
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Invalidate D-Cache
+ \details Invalidates D-Cache
+ */
+__STATIC_INLINE void csi_dcache_invalid (void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_IALL(); /* invalidate all Cache */
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief Clean D-Cache
+ \details Cleans D-Cache
+ */
+__STATIC_INLINE void csi_dcache_clean (void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_CALL(); /* clean all Cache */
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief Clean & Invalidate D-Cache
+ \details Cleans and Invalidates D-Cache
+ */
+__STATIC_INLINE void csi_dcache_clean_invalid (void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_CIALL(); /* clean and inv all Cache */
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief D-Cache Invalidate by address
+ \details Invalidates D-Cache for the given address
+ \param[in] addr address (aligned to 32-byte boundary)
+ \param[in] dsize size of memory block (in number of bytes)
+*/
+__STATIC_INLINE void csi_dcache_invalid_range (unsigned long *addr, size_t dsize)
+{
+#if (__DCACHE_PRESENT == 1U)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long)addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+
+ while (op_size > 0) {
+ __DCACHE_IPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief D-Cache Clean by address
+ \details Cleans D-Cache for the given address
+ \param[in] addr address (aligned to 32-byte boundary)
+ \param[in] dsize size of memory block (in number of bytes)
+*/
+__STATIC_INLINE void csi_dcache_clean_range (unsigned long *addr, size_t dsize)
+{
+
+#if (__DCACHE_PRESENT == 1U)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long) addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+
+ while (op_size > 0) {
+ __DCACHE_CPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+
+ __DSB();
+#endif
+
+}
+
+
+/**
+ \brief D-Cache Clean and Invalidate by address
+ \details Cleans and invalidates D_Cache for the given address
+ \param[in] addr address (aligned to 16-byte boundary)
+ \param[in] dsize size of memory block (aligned to 16-byte boundary)
+*/
+__STATIC_INLINE void csi_dcache_clean_invalid_range (unsigned long *addr, size_t dsize)
+{
+#if (__DCACHE_PRESENT == 1U)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long) addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+
+ while (op_size > 0) {
+ __DCACHE_CIPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+
+ __DSB();
+#endif
+}
+
+/*@} end of CSI_Core_CacheFunctions */
+
+#if (CONFIG_CPU_XUANTIE_E907 || CONFIG_CPU_XUANTIE_E907F || CONFIG_CPU_XUANTIE_E907FD || CONFIG_CPU_XUANTIE_E907P || CONFIG_CPU_XUANTIE_E907FP || CONFIG_CPU_XUANTIE_E907FDP)
+/**
+ \ingroup CSI_tcm_register
+ \defgroup CSI_TCM
+ \brief Type definitions for the tcm Registers
+ @{
+ */
+
+/**
+ \brief Consortium definition for accessing protection area selection register(MITCMCR, csr<0x7f9>).
+ */
+typedef union {
+ struct {
+ uint32_t EN: 1; /*!< bit: 0 Instruction Tightly-Coupled Memory enable */
+ uint32_t _reserved0: 1; /*!< bit: 1 Reserved */
+ uint32_t _reserved1: 1; /*!< bit: 2 Reserved */
+ uint32_t _reserved2: 1; /*!< bit: 3 Reserved */
+ uint32_t Size: 4; /*!< bit: 4..7 Size of ITCM */
+ uint32_t _reserved4: 4; /*!< bit: 8..11 Reserved */
+ uint32_t Base_Address: 20; /*!< bit: 12..31 Base address of ITCM */
+ } b; /*!< Structure Access by bit */
+ uint32_t w; /*!< Type Access by whole register */
+} MITCMCR_Type;
+
+#define MITCMCR_Base_Address_Pos 12U /*!< MITCMCR: Base_Address Position */
+#define MITCMCR_Base_Address_Msk (0xfffffUL << MITCMCR_Base_Address_Pos) /*!< MITCMCR: Base_Address Mask */
+
+#define MITCMCR_Size_Pos 4U /*!< MITCMCR: Size Position */
+#define MITCMCR_Size_Msk (0xfUL << MITCMCR_Size_Pos) /*!< MITCMCR: Size Mask */
+
+#define MITCMCR_EN_Pos 0U /*!< MITCMCR: EN Position */
+#define MITCMCR_EN_Msk (0x1UL << MITCMCR_EN_Pos) /*!< MITCMCR: EN Mask */
+
+/**
+ \brief Consortium definition for accessing protection area selection register(MDTCMCR, csr<0x7f8>).
+ */
+typedef union {
+ struct {
+ uint32_t EN: 1; /*!< bit: 0 Instruction Tightly-Coupled Memory enable */
+ uint32_t _reserved0: 1; /*!< bit: 1 Reserved */
+ uint32_t _reserved1: 1; /*!< bit: 2 Reserved */
+ uint32_t _reserved2: 1; /*!< bit: 3 Reserved */
+ uint32_t Size: 4; /*!< bit: 4..7 Size of DTCM */
+ uint32_t _reserved4: 4; /*!< bit: 8..11 Reserved */
+ uint32_t Base_Address: 20; /*!< bit: 12..31 Base address of DTCM */
+ } b; /*!< Structure Access by bit */
+ uint32_t w; /*!< Type Access by whole register */
+} MDTCMCR_Type;
+
+#define MDTCMCR_Base_Address_Pos 12U /*!< MDTCMCR: Base_Address Position */
+#define MDTCMCR_Base_Address_Msk (0xfffffUL << MDTCMCR_Base_Address_Pos) /*!< MDTCMCR: Base_Address Mask */
+
+#define MDTCMCR_Size_Pos 4U /*!< MDTCMCR: Size Position */
+#define MDTCMCR_Size_Msk (0xfUL << MDTCMCR_Size_Pos) /*!< MDTCMCR: Size Mask */
+
+#define MDTCMCR_EN_Pos 0U /*!< MDTCMCR: EN Position */
+#define MDTCMCR_EN_Msk (0x1UL << MDTCMCR_EN_Pos) /*!< MDTCMCR: EN Mask */
+/*@} end of group CSI_TCM_bitfield */
+
+/* ########################## TCM functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_TCMFunctions TCM Functions
+ \brief Functions that configure TCM.
+ @{
+ */
+
+/**
+ \brief Enable ITCM
+ \details Turns on ITCM
+ */
+__STATIC_INLINE void csi_itcm_enable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() | MITCMCR_EN_Msk);
+}
+
+/**
+ \brief Enable DTCM
+ \details Turns on DTCM
+ */
+__STATIC_INLINE void csi_dtcm_enable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() | MDTCMCR_EN_Msk);
+}
+
+/**
+ \brief Enable ITCM
+ \details Turns on ITCM
+ */
+__STATIC_INLINE void csi_itcm_disable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() & (~MITCMCR_EN_Msk));
+}
+
+/**
+ \brief Enable DTCM
+ \details Turns on DTCM
+ */
+__STATIC_INLINE void csi_dtcm_disable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() & (~MDTCMCR_EN_Msk));
+}
+
+/**
+ \brief Get ITCM Size
+ \details Get ITCM Size
+ \return ITCM size (bytes).
+ */
+__STATIC_INLINE uint32_t csi_itcm_get_size(void)
+{
+ MITCMCR_Type sizemask;
+ uint32_t ret;
+
+ sizemask.w = __get_MITCMCR();
+ switch (sizemask.b.Size)
+ {
+ case 0x3: ret = 4 << 10; break;
+ case 0x4: ret = 8 << 10; break;
+ case 0x5: ret = 16 << 10; break;
+ case 0x6: ret = 32 << 10; break;
+ case 0x7: ret = 64 << 10; break;
+ case 0x8: ret = 128 << 10; break;
+ case 0x9: ret = 256 << 10; break;
+ case 0xa: ret = 512 << 10; break;
+ case 0xb: ret = 1 << 20; break;
+ case 0xc: ret = 2 << 20; break;
+ case 0xd: ret = 4 << 20; break;
+ case 0xe: ret = 8 << 20; break;
+ case 0xf: ret = 16 << 20; break;
+ default: ret = 0; break;
+ }
+ return ret;
+}
+
+/**
+ \brief Get DTCM Size
+ \details Get DTCM Size
+ \return DTCM size (bytes).
+ */
+__STATIC_INLINE uint32_t csi_dtcm_get_size(void)
+{
+ MDTCMCR_Type sizemask;
+ uint32_t ret;
+
+ sizemask.w = __get_MDTCMCR();
+ switch (sizemask.b.Size)
+ {
+ case 0x3: ret = 4 << 10; break;
+ case 0x4: ret = 8 << 10; break;
+ case 0x5: ret = 16 << 10; break;
+ case 0x6: ret = 32 << 10; break;
+ case 0x7: ret = 64 << 10; break;
+ case 0x8: ret = 128 << 10; break;
+ case 0x9: ret = 256 << 10; break;
+ case 0xa: ret = 512 << 10; break;
+ case 0xb: ret = 1 << 20; break;
+ case 0xc: ret = 2 << 20; break;
+ case 0xd: ret = 4 << 20; break;
+ case 0xe: ret = 8 << 20; break;
+ case 0xf: ret = 16 << 20; break;
+ default: ret = 0; break;
+ }
+ return ret;
+}
+
+/**
+ \brief Set ITCM Base Address
+ \details Set ITCM Base Address
+ \param [in] base_addr itcm base address.
+ */
+__STATIC_INLINE void csi_itcm_set_base_addr(unsigned long base_addr)
+{
+ __set_MITCMCR((__get_MITCMCR() & (~MITCMCR_Base_Address_Msk)) | (base_addr & MITCMCR_Base_Address_Msk));
+}
+
+/**
+ \brief Set DTCM Base Address
+ \details Set DTCM Base Address
+ \param [in] base_addr dtcm base address.
+ */
+__STATIC_INLINE void csi_dtcm_set_base_addr(unsigned long base_addr)
+{
+ __set_MDTCMCR((__get_MDTCMCR() & (~MDTCMCR_Base_Address_Msk)) | (base_addr & MDTCMCR_Base_Address_Msk));
+}
+
+/*@} end of CSI_Core_TCMFunctions */
+#endif /* end e907xx */
+
+
+/*@} end of CSI_core_DebugFunctions */
+
+/* ################################## IRQ Functions ############################################ */
+
+/**
+ \brief Save the Irq context
+ \details save the psr result before disable irq.
+ */
+__STATIC_INLINE uint32_t csi_irq_save(void)
+{
+ uint32_t result;
+ result = __get_MSTATUS();
+ __disable_irq();
+ return(result);
+}
+
+/**
+ \brief Restore the Irq context
+ \details restore saved primask state.
+ \param [in] irq_state psr irq state.
+ */
+__STATIC_INLINE void csi_irq_restore(uint32_t irq_state)
+{
+ __set_MSTATUS(irq_state);
+}
+
+/*@} end of IRQ Functions */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CORE_RV32_H_DEPENDANT */
+
+#endif /* __CSI_GENERIC */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv64.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv64.h
new file mode 100644
index 000000000..c5463e936
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/core_rv64.h
@@ -0,0 +1,2002 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file core_rv64.h
+ * @brief CSI RV32 Core Peripheral Access Layer Header File
+ * @version V1.0
+ * @date 01. Sep 2018
+ ******************************************************************************/
+
+#ifndef __CORE_RV64_H_GENERIC
+#define __CORE_RV64_H_GENERIC
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+ * CSI definitions
+ ******************************************************************************/
+/**
+ \ingroup RV32
+ @{
+ */
+
+#ifndef __RV64
+#define __RV64 (0x01U)
+#endif
+
+/** __FPU_USED indicates whether an FPU is used or not.
+ This core does not support an FPU at all
+*/
+#define __FPU_USED 0U
+
+#if defined ( __GNUC__ )
+#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
+#endif
+#endif
+
+#if defined(CONFIG_PLIC_BASE)
+#ifndef CORET_BASE
+#define CORET_BASE (CONFIG_PLIC_BASE + 0x4000000UL) /*!< CORET Base Address */
+#endif
+#define PLIC ((PLIC_Type *)CONFIG_PLIC_BASE)
+#else
+#error "CONFIG_PLIC_BASE is not defined!"
+#endif /* end CONFIG_PLIC_BASE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CORE_RV32_H_GENERIC */
+
+#ifndef __CSI_GENERIC
+
+#ifndef __CORE_RV32_H_DEPENDANT
+#define __CORE_RV32_H_DEPENDANT
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* check device defines and use defaults */
+#ifndef __RV64_REV
+#define __RV64_REV 0x0000U
+#endif
+
+#ifndef __VIC_PRIO_BITS
+#define __VIC_PRIO_BITS 2U
+#endif
+
+#ifndef __Vendor_SysTickConfig
+#define __Vendor_SysTickConfig 1U
+#endif
+
+#ifndef __MPU_PRESENT
+#define __MPU_PRESENT 1U
+#endif
+
+#ifndef __ICACHE_PRESENT
+#define __ICACHE_PRESENT 1U
+#endif
+
+#ifndef __DCACHE_PRESENT
+#define __DCACHE_PRESENT 1U
+#endif
+
+
+#ifndef __L2CACHE_PRESENT
+#define __L2CACHE_PRESENT 1U
+#endif
+
+#include
+
+/* IO definitions (access restrictions to peripheral registers) */
+/**
+ \defgroup CSI_glob_defs CSI Global Defines
+
+ IO Type Qualifiers are used
+ \li to specify the access to peripheral variables.
+ \li for automatic generation of peripheral register debug information.
+*/
+#ifdef __cplusplus
+#define __I volatile /*!< Defines 'read only' permissions */
+#else
+#define __I volatile const /*!< Defines 'read only' permissions */
+#endif
+#define __O volatile /*!< Defines 'write only' permissions */
+#define __IO volatile /*!< Defines 'read / write' permissions */
+
+/* following defines should be used for structure members */
+#define __IM volatile const /*! Defines 'read only' structure member permissions */
+#define __OM volatile /*! Defines 'write only' structure member permissions */
+#define __IOM volatile /*! Defines 'read / write' structure member permissions */
+
+/*@} end of group C9xx/R9xx */
+
+/*******************************************************************************
+ * Register Abstraction
+ Core Register contain:
+ - Core Register
+ - Core CLINT Register
+ ******************************************************************************/
+/**
+ \defgroup CSI_core_register Defines and Type Definitions
+ \brief Type definitions and defines for CK80X processor based devices.
+*/
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_CORE Status and Control Registers
+ \brief Core Register type definitions.
+ @{
+ */
+
+#if CONFIG_INTC_CLIC_PLIC
+/**
+ \brief Access to the structure of a CLIC vector interrupt controller.
+ */
+typedef struct {
+ __IOM uint8_t IP; /*!< Offset: 0x000 (R/W) Interrupt set pending register */
+ __IOM uint8_t IE; /*!< Offset: 0x004 (R/W) Interrupt set enable register */
+ __IOM uint8_t ATTR; /*!< Offset: 0x008 (R/W) Interrupt set attribute register */
+ __IOM uint8_t CTL; /*!< Offset: 0x00C (R/W) Interrupt control register */
+} CLIC_INT_Control;
+
+typedef struct {
+ __IOM uint32_t CLICCFG:8; /*!< Offset: 0x000 (R/W) CLIC configure register */
+ __IM uint32_t CLICINFO;
+ __IOM uint32_t MINTTHRESH;
+ uint32_t RESERVED[1021];
+ CLIC_INT_Control CLICINT[4096];
+} CLIC_Type;
+
+#define CLIC_INFO_CLICINTCTLBITS_Pos 21U
+#define CLIC_INFO_CLICINTCTLBITS_Msk (0xFUL << CLIC_INFO_CLICINTCTLBITS_Pos)
+
+#define CLIC_INTIP_IP_Pos 0U /*!< CLIC INTIP: IP Position */
+#define CLIC_INTIP_IP_Msk (0x1UL << CLIC_INTIP_IP_Pos) /*!< CLIC INTIP: IP Mask */
+
+#define CLIC_INTIE_IE_Pos 0U /*!< CLIC INTIE: IE Position */
+#define CLIC_INTIE_IE_Msk (0x1UL << CLIC_INTIE_IE_Pos) /*!< CLIC INTIE: IE Mask */
+
+#define CLIC_INTIE_T_Pos 7U /*!< CLIC INTIE: T Position */
+#define CLIC_INTIE_T_Msk (0x1UL << CLIC_INTIE_T_Pos) /*!< CLIC INTIE: T Mask */
+
+#define CLIC_INTATTR_TRIG_Pos 1U /*!< CLIC INTATTR: TRIG Position */
+#define CLIC_INTATTR_TRIG_Msk (0x3UL << CLIC_INTATTR_TRIG_Pos) /*!< CLIC INTATTR: TRIG Mask */
+
+#define CLIC_INTATTR_SHV_Pos 0U /*!< CLIC INTATTR: SHV Position */
+#define CLIC_INTATTR_SHV_Msk (0x1UL << CLIC_INTATTR_SHV_Pos) /*!< CLIC INTATTR: SHV Mask */
+
+#define CLIC_INTCFG_NVBIT_Pos 5U /*!< CLIC INTCFG: NVBIT Position */
+#define CLIC_INTCFG_NVBIT_Msk (0x1UL << CLIC_INTCFG_NVBIT_Pos) /*!< CLIC INTCFG: NVBIT Mask */
+
+#define CLIC_INTCFG_PRIO_Pos 5U /*!< CLIC INTCFG: INTCFG Position */
+#define CLIC_INTCFG_PRIO_Msk (0x7UL << CLIC_INTCFG_PRIO_Pos) /*!< CLIC INTCFG: INTCFG Mask */
+
+#define CLIC_CLICCFG_NVBIT_Pos 0U /*!< CLIC CLICCFG: NVBIT Position */
+#define CLIC_CLICCFG_NVBIT_Msk (0x1UL << CLIC_CLICCFG_NVBIT_Pos) /*!< CLIC CLICCFG: NVBIT Mask */
+
+#define CLIC_CLICCFG_NLBIT_Pos 1U /*!< CLIC CLICCFG: NLBIT Position */
+#define CLIC_CLICCFG_NLBIT_Msk (0xFUL << CLIC_CLICCFG_NLBIT_Pos) /*!< CLIC CLICCFG: NLBIT Mask */
+
+#define CLIC_CLICCFG_NMBIT_Pos 5U /*!< CLIC CLICCFG: NMBIT Position */
+#define CLIC_CLICCFG_NMBIT_Msk (0x3UL << CLIC_CLICCFG_NMBIT_Pos) /*!< CLIC CLICCFG: NMBIT Mask */
+
+#if defined(CONFIG_CLIC_BASE)
+#define CLIC ((CLIC_Type *)CONFIG_CLIC_BASE) /*!< CLIC configuration struct */
+#else
+#error "CONFIG_CLIC_BASE is not defined!"
+#endif /* end CONFIG_CLIC_BASE */
+
+#endif /* CONFIG_INTC_CLIC_PLIC */
+
+
+/**
+ \brief Access to the structure of a PLIC vector interrupt controller.
+ */
+
+typedef struct {
+ uint32_t RESERVED0;
+ __IOM uint32_t PLIC_PRIO[1023];
+ __IOM uint32_t PLIC_IP[32];
+ uint32_t RESERVED1[3972 / 4 - 1];
+ __IOM uint32_t PLIC_H0_MIE[32];
+ __IOM uint32_t PLIC_H0_SIE[32];
+ __IOM uint32_t PLIC_H1_MIE[32];
+ __IOM uint32_t PLIC_H1_SIE[32];
+ __IOM uint32_t PLIC_H2_MIE[32];
+ __IOM uint32_t PLIC_H2_SIE[32];
+ __IOM uint32_t PLIC_H3_MIE[32];
+ __IOM uint32_t PLIC_H3_SIE[32];
+ __IOM uint32_t PLIC_H4_MIE[32];
+ __IOM uint32_t PLIC_H4_SIE[32];
+ __IOM uint32_t PLIC_H5_MIE[32];
+ __IOM uint32_t PLIC_H5_SIE[32];
+ __IOM uint32_t PLIC_H6_MIE[32];
+ __IOM uint32_t PLIC_H6_SIE[32];
+ __IOM uint32_t PLIC_H7_MIE[32];
+ __IOM uint32_t PLIC_H7_SIE[32];
+
+ uint32_t RESERVED2[(0x01FFFFC - 0x00027FC) / 4 - 1];
+ __IOM uint32_t PLIC_PER;
+ __IOM uint32_t PLIC_H0_MTH;
+ __IOM uint32_t PLIC_H0_MCLAIM;
+ uint32_t RESERVED3[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H0_STH;
+ __IOM uint32_t PLIC_H0_SCLAIM;
+ uint32_t RESERVED4[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H1_MTH;
+ __IOM uint32_t PLIC_H1_MCLAIM;
+ uint32_t RESERVED5[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H1_STH;
+ __IOM uint32_t PLIC_H1_SCLAIM;
+ uint32_t RESERVED6[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H2_MTH;
+ __IOM uint32_t PLIC_H2_MCLAIM;
+ uint32_t RESERVED7[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H2_STH;
+ __IOM uint32_t PLIC_H2_SCLAIM;
+ uint32_t RESERVED8[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H3_MTH;
+ __IOM uint32_t PLIC_H3_MCLAIM;
+ uint32_t RESERVED9[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H3_STH;
+ __IOM uint32_t PLIC_H3_SCLAIM;
+ uint32_t RESERVED10[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H4_MTH;
+ __IOM uint32_t PLIC_H4_MCLAIM;
+ uint32_t RESERVED11[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H4_STH;
+ __IOM uint32_t PLIC_H4_SCLAIM;
+ uint32_t RESERVED12[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H5_MTH;
+ __IOM uint32_t PLIC_H5_MCLAIM;
+ uint32_t RESERVED13[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H5_STH;
+ __IOM uint32_t PLIC_H5_SCLAIM;
+ uint32_t RESERVED14[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H6_MTH;
+ __IOM uint32_t PLIC_H6_MCLAIM;
+ uint32_t RESERVED15[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H6_STH;
+ __IOM uint32_t PLIC_H6_SCLAIM;
+ uint32_t RESERVED16[0xFFC / 4 - 1];
+
+ __IOM uint32_t PLIC_H7_MTH;
+ __IOM uint32_t PLIC_H7_MCLAIM;
+ uint32_t RESERVED17[0xFFC / 4 - 1];
+ __IOM uint32_t PLIC_H7_STH;
+ __IOM uint32_t PLIC_H7_SCLAIM;
+ uint32_t RESERVED18[0xFFC / 4 - 1];
+} PLIC_Type;
+
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_PMP Physical Memory Protection (PMP)
+ \brief Type definitions for the PMP Registers
+ @{
+ */
+
+#define PMP_PMPCFG_R_Pos 0U /*!< PMP PMPCFG: R Position */
+#define PMP_PMPCFG_R_Msk (0x1UL << PMP_PMPCFG_R_Pos) /*!< PMP PMPCFG: R Mask */
+
+#define PMP_PMPCFG_W_Pos 1U /*!< PMP PMPCFG: W Position */
+#define PMP_PMPCFG_W_Msk (0x1UL << PMP_PMPCFG_W_Pos) /*!< PMP PMPCFG: W Mask */
+
+#define PMP_PMPCFG_X_Pos 2U /*!< PMP PMPCFG: X Position */
+#define PMP_PMPCFG_X_Msk (0x1UL << PMP_PMPCFG_X_Pos) /*!< PMP PMPCFG: X Mask */
+
+#define PMP_PMPCFG_A_Pos 3U /*!< PMP PMPCFG: A Position */
+#define PMP_PMPCFG_A_Msk (0x3UL << PMP_PMPCFG_A_Pos) /*!< PMP PMPCFG: A Mask */
+
+#define PMP_PMPCFG_L_Pos 7U /*!< PMP PMPCFG: L Position */
+#define PMP_PMPCFG_L_Msk (0x1UL << PMP_PMPCFG_L_Pos) /*!< PMP PMPCFG: L Mask */
+
+typedef enum {
+ REGION_SIZE_4B = -1,
+ REGION_SIZE_8B = 0,
+ REGION_SIZE_16B = 1,
+ REGION_SIZE_32B = 2,
+ REGION_SIZE_64B = 3,
+ REGION_SIZE_128B = 4,
+ REGION_SIZE_256B = 5,
+ REGION_SIZE_512B = 6,
+ REGION_SIZE_1KB = 7,
+ REGION_SIZE_2KB = 8,
+ REGION_SIZE_4KB = 9,
+ REGION_SIZE_8KB = 10,
+ REGION_SIZE_16KB = 11,
+ REGION_SIZE_32KB = 12,
+ REGION_SIZE_64KB = 13,
+ REGION_SIZE_128KB = 14,
+ REGION_SIZE_256KB = 15,
+ REGION_SIZE_512KB = 16,
+ REGION_SIZE_1MB = 17,
+ REGION_SIZE_2MB = 18,
+ REGION_SIZE_4MB = 19,
+ REGION_SIZE_8MB = 20,
+ REGION_SIZE_16MB = 21,
+ REGION_SIZE_32MB = 22,
+ REGION_SIZE_64MB = 23,
+ REGION_SIZE_128MB = 24,
+ REGION_SIZE_256MB = 25,
+ REGION_SIZE_512MB = 26,
+ REGION_SIZE_1GB = 27,
+ REGION_SIZE_2GB = 28,
+ REGION_SIZE_4GB = 29,
+ REGION_SIZE_8GB = 30,
+ REGION_SIZE_16GB = 31
+} region_size_e;
+
+typedef enum {
+ ADDRESS_MATCHING_TOR = 1,
+ ADDRESS_MATCHING_NAPOT = 3
+} address_matching_e;
+
+typedef struct {
+ uint32_t r: 1; /* readable enable */
+ uint32_t w: 1; /* writeable enable */
+ uint32_t x: 1; /* execable enable */
+ address_matching_e a: 2; /* address matching mode */
+ uint32_t reserved: 2; /* reserved */
+ uint32_t l: 1; /* lock enable */
+} pmp_region_attr_t;
+
+/*@} end of group CSI_PMP */
+
+/* CACHE Register Definitions */
+#define CACHE_MHCR_WBR_Pos 8U /*!< CACHE MHCR: WBR Position */
+#define CACHE_MHCR_WBR_Msk (0x1UL << CACHE_MHCR_WBR_Pos) /*!< CACHE MHCR: WBR Mask */
+
+#define CACHE_MHCR_IBPE_Pos 7U /*!< CACHE MHCR: IBPE Position */
+#define CACHE_MHCR_IBPE_Msk (0x1UL << CACHE_MHCR_IBPE_Pos) /*!< CACHE MHCR: IBPE Mask */
+
+#define CACHE_MHCR_BTB_Pos 6U /*!< CACHE MHCR: BTB Position */
+#define CACHE_MHCR_BTB_Msk (0x1UL << CACHE_MHCR_BTB_Pos) /*!< CACHE MHCR: BTB Mask */
+
+#define CACHE_MHCR_BPE_Pos 5U /*!< CACHE MHCR: BPE Position */
+#define CACHE_MHCR_BPE_Msk (0x1UL << CACHE_MHCR_BPE_Pos) /*!< CACHE MHCR: BPE Mask */
+
+#define CACHE_MHCR_RS_Pos 4U /*!< CACHE MHCR: RS Position */
+#define CACHE_MHCR_RS_Msk (0x1UL << CACHE_MHCR_RS_Pos) /*!< CACHE MHCR: RS Mask */
+
+#define CACHE_MHCR_WB_Pos 3U /*!< CACHE MHCR: WB Position */
+#define CACHE_MHCR_WB_Msk (0x1UL << CACHE_MHCR_WB_Pos) /*!< CACHE MHCR: WB Mask */
+
+#define CACHE_MHCR_WA_Pos 2U /*!< CACHE MHCR: WA Position */
+#define CACHE_MHCR_WA_Msk (0x1UL << CACHE_MHCR_WA_Pos) /*!< CACHE MHCR: WA Mask */
+
+#define CACHE_MHCR_DE_Pos 1U /*!< CACHE MHCR: DE Position */
+#define CACHE_MHCR_DE_Msk (0x1UL << CACHE_MHCR_DE_Pos) /*!< CACHE MHCR: DE Mask */
+
+#define CACHE_MHCR_IE_Pos 0U /*!< CACHE MHCR: IE Position */
+#define CACHE_MHCR_IE_Msk (0x1UL << CACHE_MHCR_IE_Pos) /*!< CACHE MHCR: IE Mask */
+
+#if CONFIG_CPU_XUANTIE_R908 || CONFIG_CPU_XUANTIE_R908FD || CONFIG_CPU_XUANTIE_R908FDV \
+ || CONFIG_CPU_XUANTIE_R908_CP || CONFIG_CPU_XUANTIE_R908FD_CP || CONFIG_CPU_XUANTIE_R908FDV_CP \
+ || CONFIG_CPU_XUANTIE_R908_CP_XT || CONFIG_CPU_XUANTIE_R908FD_CP_XT || CONFIG_CPU_XUANTIE_R908FDV_CP_XT \
+ || CONFIG_CPU_XUANTIE_C908X || CONFIG_CPU_XUANTIE_C908X_CP || CONFIG_CPU_XUANTIE_C908X_CP_XT
+#define MCER_ECC_FATAL_Pos 34U
+#define MCER_ECC_FATAL_Msk (0x1ULL << MCER_ECC_FATAL_Pos)
+
+#define MCER_ECC_VLD_Pos 35U
+#define MCER_ECC_VLD_Msk (0x1ULL << MCER_ECC_VLD_Pos)
+
+#define MCER_RAMID_Pos 25U
+#define MCER_RAMID_Msk (0x7ULL << MCER_RAMID_Pos)
+#else
+#define MCER_ECC_FATAL_Pos 30U
+#define MCER_ECC_FATAL_Msk (0x1ULL << MCER_ECC_FATAL_Pos)
+#define MCER_ECC_VLD_Pos 31U
+#define MCER_ECC_VLD_Msk (0x1ULL << MCER_ECC_VLD_Pos)
+#define MCER_RAMID_Pos 21U
+#define MCER_RAMID_Msk (0x7ULL << MCER_RAMID_Pos)
+#endif
+
+#define CACHE_MCER2_ECC_FATAL_Pos 62U
+#define CACHE_MCER2_ECC_FATAL_Msk (0x1ULL << CACHE_MCER2_ECC_FATAL_Pos)
+
+#define CACHE_MCER2H_ECC_FATAL_Pos 30U
+#define CACHE_MCER2H_ECC_FATAL_Msk (0x1ULL << CACHE_MCER2H_ECC_FATAL_Pos)
+
+#define CACHE_MCER2_ECC_VLD_Pos 63U
+#define CACHE_MCER2_ECC_VLD_Msk (0x1ULL << CACHE_MCER2_ECC_VLD_Pos)
+
+#define CACHE_MCER2H_ECC_VLD_Pos 31U
+#define CACHE_MCER2H_ECC_VLD_Msk (0x1ULL << CACHE_MCER2H_ECC_VLD_Pos)
+
+#define CACHE_MCER2_RAMID_Pos 53U
+#define CACHE_MCER2_RAMID_Msk (0x3ULL << CACHE_MCER2_RAMID_Pos)
+
+#define CACHE_MCER2H_RAMID_Pos 21U
+#define CACHE_MCER2H_RAMID_Msk (0x3ULL << CACHE_MCER2H_RAMID_Pos)
+
+#define CACHE_INV_ADDR_Pos 6U
+#define CACHE_INV_ADDR_Msk (~((0x1ULL << CACHE_INV_ADDR_Pos) - 1))
+
+enum MCER_FAULT_RAMID {
+ /* L1 Cache, JTLB and TCM (RAMID of MCER)*/
+ MCER_FAULT_RAMID_L1_ICACHE_TAG = 0,
+ MCER_FAULT_RAMID_L1_ICACHE_DATA,
+ MCER_FAULT_RAMID_L1_DCACHE_TAG,
+ MCER_FAULT_RAMID_L1_DCACHE_DATA,
+ MCER_FAULT_RAMID_JTLB_TAG,
+ MCER_FAULT_RAMID_JTLB_DATA,
+ MCER_FAULT_RAMID_DTCM,
+ MCER_FAULT_RAMID_ITCM
+};
+
+enum MCER2_FAULT_RAMID {
+ MCER2_FAULT_RAMID_L2_CACHE_TAG = 0,
+ MCER2_FAULT_RAMID_L2_CACHE_DATA,
+ MCER2_FAULT_RAMID_L2_CACHE_DIRTY
+};
+
+/*@} end of group CSI_CACHE */
+
+// MSTATUS Register
+#define MSTATUS_TVM_MASK (1L << 20) // mstatus.TVM [20]
+#define MSTATUS_MPP_MASK (3L << 11) // mstatus.SPP [11:12]
+#ifndef MSTATUS_MPP_M
+#define MSTATUS_MPP_M (3L << 11) // Machine mode 11
+#endif
+#define MSTATUS_MPP_S (1L << 11) // Supervisor mode 01
+#define MSTATUS_MPP_U (0L << 11) // User mode 00
+
+// SSTATUS Register
+#define SSTATUS_SPP_MASK (3L << 8) // sstatus.SPP [8:9]
+#define SSTATUS_SPP_S (1L << 8) // Supervisor mode 01
+#define SSTATUS_SPP_U (0L << 8) // User mode 00
+
+typedef enum {
+ USER_MODE = 0,
+ SUPERVISOR_MODE = 1,
+ MACHINE_MODE = 3,
+} cpu_work_mode_t;
+
+/**
+ \brief Get CPU WORK MODE
+ \details Returns CPU WORK MODE.
+ \return CPU WORK MODE
+ */
+__STATIC_INLINE int csi_get_cpu_work_mode(void)
+{
+ return (int)__get_CPU_WORK_MODE();
+}
+
+/**
+ \brief Get current hartid
+ \return hartid
+ */
+__STATIC_INLINE int csi_get_cpu_id(void)
+{
+ unsigned long result;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ return 0;
+#endif
+ __ASM volatile("csrr %0, mhartid" : "=r"(result) : : "memory");
+ return result;
+}
+
+/**
+ \brief Get cache line size
+ \return cache line size
+ */
+__STATIC_INLINE int csi_get_cache_line_size(void)
+{
+ return 64;
+}
+
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_CINT Core Local Interrupt (CLINT)
+ \brief Type definitions for the Core Local Interrupt Registers.
+ @{
+ */
+
+/**
+ \brief The data structure of the access Clint.
+ */
+typedef struct {
+ __IOM uint32_t MSIP0;
+ __IOM uint32_t MSIP1;
+ __IOM uint32_t MSIP2;
+ __IOM uint32_t MSIP3;
+ __IOM uint32_t MSIP4;
+ __IOM uint32_t MSIP5;
+ __IOM uint32_t MSIP6;
+ __IOM uint32_t MSIP7;
+ uint32_t RESERVED0[(0x4004000 - 0x400001C) / 4 - 1];
+ __IOM uint32_t MTIMECMPL0;
+ __IOM uint32_t MTIMECMPH0;
+ __IOM uint32_t MTIMECMPL1;
+ __IOM uint32_t MTIMECMPH1;
+ __IOM uint32_t MTIMECMPL2;
+ __IOM uint32_t MTIMECMPH2;
+ __IOM uint32_t MTIMECMPL3;
+ __IOM uint32_t MTIMECMPH3;
+ __IOM uint32_t MTIMECMPL4;
+ __IOM uint32_t MTIMECMPH4;
+ __IOM uint32_t MTIMECMPL5;
+ __IOM uint32_t MTIMECMPH5;
+ __IOM uint32_t MTIMECMPL6;
+ __IOM uint32_t MTIMECMPH6;
+ __IOM uint32_t MTIMECMPL7;
+ __IOM uint32_t MTIMECMPH7;
+ uint32_t RESERVED1[(0x400BFF8 - 0x400403C) / 4 - 1];
+ __IOM uint32_t MTIMEL;
+ __IOM uint32_t MTIMEH;
+ __IOM uint32_t SSIP0;
+ __IOM uint32_t SSIP1;
+ __IOM uint32_t SSIP2;
+ __IOM uint32_t SSIP3;
+ __IOM uint32_t SSIP4;
+ __IOM uint32_t SSIP5;
+ __IOM uint32_t SSIP6;
+ __IOM uint32_t SSIP7;
+ uint32_t RESERVED2[(0x400D000 - 0x400C01C) / 4 - 1];
+ __IOM uint32_t STIMECMPL0;
+ __IOM uint32_t STIMECMPH0;
+ __IOM uint32_t STIMECMPL1;
+ __IOM uint32_t STIMECMPH1;
+ __IOM uint32_t STIMECMPL2;
+ __IOM uint32_t STIMECMPH2;
+ __IOM uint32_t STIMECMPL3;
+ __IOM uint32_t STIMECMPH3;
+ __IOM uint32_t STIMECMPL4;
+ __IOM uint32_t STIMECMPH4;
+ __IOM uint32_t STIMECMPL5;
+ __IOM uint32_t STIMECMPH5;
+ __IOM uint32_t STIMECMPL6;
+ __IOM uint32_t STIMECMPH6;
+ __IOM uint32_t STIMECMPL7;
+ __IOM uint32_t STIMECMPH7;
+ uint32_t RESERVED3[(0x400FFF8 - 0x400D03C) / 4 - 1];
+ __IOM uint32_t STIMEL;
+ __IOM uint32_t STIMEH;
+} CLINT_Type;
+
+typedef struct {
+#ifdef CONFIG_RISCV_SMODE
+ __IOM uint32_t STIMECMPL0;
+ __IOM uint32_t STIMECMPH0;
+#else
+ __IOM uint32_t MTIMECMPL0;
+ __IOM uint32_t MTIMECMPH0;
+#endif
+} CLINT_CMP_Type;
+
+/*@} end of group CSI_SysTick */
+
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_core_bitfield Core register bit field macros
+ \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
+ @{
+ */
+
+/**
+ \brief Mask and shift a bit field value for use in a register bit range.
+ \param[in] field Name of the register bit field.
+ \param[in] value Value of the bit field.
+ \return Masked and shifted value.
+*/
+#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk)
+
+/**
+ \brief Mask and shift a register value to extract a bit filed value.
+ \param[in] field Name of the register bit field.
+ \param[in] value Value of register.
+ \return Masked and shifted bit field value.
+*/
+#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos)
+
+/*@} end of group CSI_core_bitfield */
+
+/**
+ \ingroup CSI_core_register
+ \defgroup CSI_core_base Core Definitions
+ \brief Definitions for base addresses, unions, and structures.
+ @{
+ */
+
+/*@} */
+
+/*******************************************************************************
+ * Hardware Abstraction Layer
+ Core Function Interface contains:
+ - Core VIC Functions
+ - Core CORET Functions
+ - Core Register Access Functions
+ ******************************************************************************/
+/**
+ \defgroup CSI_Core_FunctionInterface Functions and Instructions Reference
+*/
+
+/* ########################## VIC functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_VICFunctions VIC Functions
+ \brief Functions that manage interrupts and exceptions via the VIC.
+ @{
+ */
+
+/* The following MACROS handle generation of the register offset and byte masks */
+#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL)
+#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 5UL) )
+#define _IP2_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) )
+
+#define PLIC_Hn_MSIE_ADDR(msie_base, hartid) ((unsigned long)(msie_base) + 0x100 * (hartid))
+#define PLIC_Hn_MSIE_VAL(msie_base, hartid) (*(__IOM uint32_t *)(PLIC_Hn_MSIE_ADDR(msie_base, hartid)))
+#define PLIC_Hn_MSTH_ADDR(msth_base, hartid) ((unsigned long)(msth_base) + 0x2000 * (hartid))
+#define PLIC_Hn_MSTH_VAL(msth_base, hartid) (*(__IOM uint32_t *)(PLIC_Hn_MSTH_ADDR(msth_base, hartid)))
+#define PLIC_Hn_MSCLAIM_ADDR(msclaim_base, hartid) ((unsigned long)(msclaim_base) + 0x2000 * (hartid))
+#define PLIC_Hn_MSCLAIM_VAL(msclaim_base, hartid) (*(__IOM uint32_t *)(PLIC_Hn_MSCLAIM_ADDR(msclaim_base, hartid)))
+
+/**
+ \brief Enable External Interrupt
+ \details Enable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_enable_irq(int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ CLIC->CLICINT[IRQn].IE |= CLIC_INTIE_IE_Msk;
+ __DSB();
+ return;
+ }
+#endif
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) | (0x1 << (IRQn%32));
+#else
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) | (0x1 << (IRQn%32));
+#endif
+}
+
+/**
+ \brief Enable External Interrupt(deprecated)
+ \details Enable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] plic_base PLIC base address
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_plic_enable_irq(unsigned long plic_base, int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) | (0x1 << (IRQn%32));
+#else
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) | (0x1 << (IRQn%32));
+#endif
+}
+
+/**
+ \brief Disable External Interrupt
+ \details Disable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_disable_irq(int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ CLIC->CLICINT[IRQn].IE &= ~CLIC_INTIE_IE_Msk;
+ __DSB();
+ return;
+ }
+#endif
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) & (~(0x1 << (IRQn%32)));
+#else
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) & (~(0x1 << (IRQn%32)));
+#endif
+}
+
+/**
+ \brief Disable External Interrupt(deprecated)
+ \details Disable a device-specific interrupt in the VIC interrupt controller.
+ \param [in] plic_base PLIC base address
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_plic_disable_irq(unsigned long plic_base, int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) & (~(0x1 << (IRQn%32)));
+#else
+ PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) = PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) & (~(0x1 << (IRQn%32)));
+#endif
+}
+
+/**
+ \brief Check Interrupt is Enabled or not
+ \details Read the enabled register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ \return 0 Interrupt status is not enabled.
+ \return 1 Interrupt status is enabled.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_enabled_irq(int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ return (uint32_t)(CLIC->CLICINT[IRQn].IE & CLIC_INTIE_IE_Msk);
+ }
+#endif
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ return (uint32_t)((PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) >> IRQn%32) & 0x1);
+#else
+ return (uint32_t)((PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) >> IRQn%32) & 0x1);
+#endif
+}
+
+/**
+ \brief Check Interrupt is Enabled or not(deprecated)
+ \details Read the enabled register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn Interrupt number.
+ \return 0 Interrupt status is not enabled.
+ \return 1 Interrupt status is enabled.
+ */
+__STATIC_INLINE uint32_t csi_plic_get_enabled_irq(unsigned long plic_base, int32_t IRQn)
+{
+ int hartid = csi_get_cpu_id();
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ return (uint32_t)((PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_SIE[IRQn/32], hartid) >> IRQn%32) & 0x1);
+#else
+ return (uint32_t)((PLIC_Hn_MSIE_VAL(&plic->PLIC_H0_MIE[IRQn/32], hartid) >> IRQn%32) & 0x1);
+#endif
+}
+
+/**
+ \brief Check Interrupt is Pending or not
+ \details Read the pending register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn Interrupt number.
+ \return 0 Interrupt status is not pending.
+ \return 1 Interrupt status is pending.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_pending_irq(int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ return (uint32_t)(CLIC->CLICINT[IRQn].IP & CLIC_INTIP_IP_Msk);
+ }
+#endif
+ return (uint32_t)((plic->PLIC_IP[IRQn/32] >> IRQn%32) & 0x1);
+}
+
+/**
+ \brief Set Pending Interrupt
+ \details Set the pending bit of an external interrupt.
+ \param [in] IRQn Interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_set_pending_irq(int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ CLIC->CLICINT[IRQn].IP |= CLIC_INTIP_IP_Msk;
+ __DSB();
+ return;
+ }
+#endif
+ plic->PLIC_IP[IRQn/32] = plic->PLIC_IP[IRQn/32] | (0x1 << (IRQn%32));
+ __DSB();
+}
+
+/**
+ \brief Clear Pending Interrupt
+ \details Clear the pending bit of an external interrupt.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_vic_clear_pending_irq(int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ CLIC->CLICINT[IRQn].IP &= ~CLIC_INTIP_IP_Msk;
+ __DSB();
+ return;
+ }
+#endif
+ plic->PLIC_H0_SCLAIM = IRQn;
+ __DSB();
+}
+
+/**
+ \brief Check Interrupt is Pending or not(deprecated)
+ \details Read the pending register in the VIC and returns the pending bit for the specified interrupt.
+ \param [in] IRQn Interrupt number.
+ \return 0 Interrupt status is not pending.
+ \return 1 Interrupt status is pending.
+ */
+__STATIC_INLINE uint32_t csi_plic_get_pending_irq(unsigned long plic_base, int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+ return (uint32_t)((plic->PLIC_IP[IRQn/32] >> IRQn%32) & 0x1);
+}
+
+/**
+ \brief Set Pending Interrupt(deprecated)
+ \details Set the pending bit of an external interrupt.
+ \param [in] IRQn Interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_plic_set_pending_irq(unsigned long plic_base, int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+ plic->PLIC_IP[IRQn/32] = plic->PLIC_IP[IRQn/32] | (0x1 << (IRQn%32));
+}
+
+/**
+ \brief Clear Pending Interrupt(deprecated)
+ \details Clear the pending bit of an external interrupt.
+ \param [in] IRQn External interrupt number. Value cannot be negative.
+ */
+__STATIC_INLINE void csi_plic_clear_pending_irq(unsigned long plic_base, int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+ plic->PLIC_H0_SCLAIM = IRQn;
+}
+
+/**
+ \brief Set Interrupt Priority
+ \details Set the priority of an interrupt.
+ \note The priority cannot be set for every core interrupt.
+ \param [in] IRQn Interrupt number.
+ \param [in] priority Priority to set.
+ */
+__STATIC_INLINE void csi_vic_set_prio(int32_t IRQn, uint32_t priority)
+{
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ uint8_t nlbits = (CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos;
+ uint8_t ctl = CLIC->CLICINT[IRQn].CTL;
+ ctl <<= nlbits;
+ ctl >>= nlbits;
+ CLIC->CLICINT[IRQn].CTL = ctl | (priority << (8 - nlbits));
+ __DSB();
+ return;
+ }
+#endif
+ plic->PLIC_PRIO[IRQn - 1] = priority;
+ __DSB();
+}
+
+/**
+ \brief Get Interrupt Priority
+ \details Read the priority of an interrupt.
+ The interrupt number can be positive to specify an external (device specific) interrupt,
+ or negative to specify an internal (core) interrupt.
+ \param [in] IRQn Interrupt number.
+ \return Interrupt Priority.
+ Value is aligned automatically to the implemented priority bits of the microcontroller.
+ */
+__STATIC_INLINE uint32_t csi_vic_get_prio(int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)CONFIG_PLIC_BASE;
+#if CONFIG_INTC_CLIC_PLIC
+ if ((uint32_t)IRQn > PLIC_IRQ_OFFSET) {
+ IRQn -= PLIC_IRQ_OFFSET;
+ } else {
+ uint8_t nlbits = (CLIC->CLICINFO & CLIC_INFO_CLICINTCTLBITS_Msk) >> CLIC_INFO_CLICINTCTLBITS_Pos;
+ return CLIC->CLICINT[IRQn].CTL >> (8 - nlbits);
+ }
+#endif
+ uint32_t prio = plic->PLIC_PRIO[IRQn - 1];
+ return prio;
+}
+
+/**
+ \brief Set Interrupt Priority(deprecated)
+ \details Set the priority of an interrupt.
+ \note The priority cannot be set for every core interrupt.
+ \param [in] IRQn Interrupt number.
+ \param [in] priority Priority to set.
+ */
+__STATIC_INLINE void csi_plic_set_prio(unsigned long plic_base, int32_t IRQn, uint32_t priority)
+{
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+ plic->PLIC_PRIO[IRQn - 1] = priority;
+}
+
+/**
+ \brief Get Interrupt Priority(deprecated)
+ \details Read the priority of an interrupt.
+ The interrupt number can be positive to specify an external (device specific) interrupt,
+ or negative to specify an internal (core) interrupt.
+ \param [in] IRQn Interrupt number.
+ \return Interrupt Priority.
+ Value is aligned automatically to the implemented priority bits of the microcontroller.
+ */
+__STATIC_INLINE uint32_t csi_plic_get_prio(unsigned long plic_base, int32_t IRQn)
+{
+ PLIC_Type *plic = (PLIC_Type *)plic_base;
+ uint32_t prio = plic->PLIC_PRIO[IRQn - 1];
+ return prio;
+}
+
+/*@} end of CSI_Core_VICFunctions */
+
+/* ########################## PMP functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_PMPFunctions PMP Functions
+ \brief Functions that manage interrupts and exceptions via the VIC.
+ @{
+ */
+
+/**
+ \brief configure physical memory protection region.
+ \details
+ \param [in] idx memory protection region (0, 1, 2, ..., 15).
+ \param [in] base_addr base address must be aligned with page size.
+ \param [in] size \ref region_size_e. memory protection region size.
+ \param [in] attr \ref pmp_region_attr_t. memory protection region attribute.
+ \param [in] enable enable or disable memory protection region.
+ */
+__STATIC_INLINE void csi_pmp_config_region(uint32_t idx, unsigned long base_addr, region_size_e size,
+ pmp_region_attr_t attr, uint32_t enable)
+{
+ uint8_t pmpxcfg = 0;
+ uint32_t addr = 0;
+
+ if (idx > 15) {
+ return;
+ }
+
+ if (!enable) {
+ attr.a = (address_matching_e)0;
+ }
+
+ if (attr.a == ADDRESS_MATCHING_TOR) {
+ addr = base_addr >> 2;
+ } else {
+ if (size == REGION_SIZE_4B) {
+ addr = base_addr >> 2;
+ attr.a = (address_matching_e)2;
+ } else {
+ addr = ((base_addr >> 2) & (0xFFFFFFFFFFFFFFFFUL - ((1 << (size + 1)) - 1))) | ((1 << size) - 1);
+ }
+ }
+
+ __set_PMPADDRx(idx, addr);
+
+ pmpxcfg |= (attr.r << PMP_PMPCFG_R_Pos) | (attr.w << PMP_PMPCFG_W_Pos) |
+ (attr.x << PMP_PMPCFG_X_Pos) | (attr.a << PMP_PMPCFG_A_Pos) |
+ (attr.l << PMP_PMPCFG_L_Pos);
+
+ __set_PMPxCFG(idx, pmpxcfg);
+}
+
+/**
+ \brief disable physical memory protection region by idx.
+ \details
+ \param [in] idx memory protection region (0, 1, 2, ..., 15).
+ */
+__STATIC_INLINE void csi_pmp_disable_region(uint32_t idx)
+{
+ __set_PMPxCFG(idx, __get_PMPxCFG(idx) & (~PMP_PMPCFG_A_Msk));
+}
+
+/*@} end of CSI_Core_PMPFunctions */
+
+/* ################################## SysTick function ############################################ */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_SysTickFunctions SysTick Functions
+ \brief Functions that configure the System.
+ @{
+ */
+
+#define CLINT_TIMECMPn_ADDR(time_cmp_base, hartid) ((unsigned long)(time_cmp_base) + 8 * (hartid))
+#define CLINT_TIMECMPn_VAL(time_cmp_base, hartid) (*(__IOM uint32_t *)(CLINT_TIMECMPn_ADDR(time_cmp_base, hartid)))
+
+__STATIC_INLINE uint32_t _csi_clint_config2(unsigned long coret_base, uint16_t hartid, uint64_t ticks, int32_t IRQn)
+{
+ CLINT_Type *clint = (CLINT_Type *)coret_base;
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ uint64_t value = (((uint64_t)(CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid))) << 32) + \
+ (uint64_t)(CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid));
+
+ if ((value != 0) && (value != 0xffffffffffffffff)) {
+ value = value + (uint64_t)ticks;
+ } else {
+ value = __get_MTIME() + ticks;
+ }
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid) = (uint32_t)(value >> 32);
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid) = (uint32_t)value;
+#else
+ uint64_t value = (((uint64_t)(CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid))) << 32) + \
+ (uint64_t)(CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid));
+
+ if ((value != 0) && (value != 0xffffffffffffffff)) {
+ value = value + (uint64_t)ticks;
+ } else {
+ value = __get_MTIME() + ticks;
+ }
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid) = (uint32_t)(value >> 32);
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid) = (uint32_t)value;
+#endif
+
+ return (0UL);
+}
+
+__STATIC_INLINE uint32_t csi_clint_config(unsigned long coret_base, uint32_t ticks, int32_t IRQn)
+{
+ return _csi_clint_config2(coret_base, 0, ticks, IRQn);
+}
+
+__STATIC_INLINE void csi_coret_reset_value2()
+{
+ uint32_t value = 0x0;
+ int hartid = csi_get_cpu_id();
+ CLINT_Type *clint = (CLINT_Type *)CORET_BASE;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid) = (uint32_t)value;
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid) = (uint32_t)value;
+#else
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid) = (uint32_t)value;
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid) = (uint32_t)value;
+#endif
+}
+
+__STATIC_INLINE void csi_coret_reset_value(unsigned long coret_base)
+{
+ uint32_t value = 0x0;
+ int hartid = csi_get_cpu_id();
+ CLINT_Type *clint = (CLINT_Type *)coret_base;
+
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid) = (uint32_t)value;
+ CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid) = (uint32_t)value;
+#else
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid) = (uint32_t)value;
+ CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid) = (uint32_t)value;
+#endif
+}
+
+__STATIC_INLINE uint64_t _csi_clint_get_load2(unsigned long coret_base, uint16_t hartid)
+{
+ CLINT_Type *clint = (CLINT_Type *)coret_base;
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ uint64_t value = (((uint64_t)CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid)) << 32) + \
+ (uint64_t)CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid);
+#else
+ uint64_t value = (((uint64_t)CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid)) << 32) + \
+ (uint64_t)CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid);
+#endif
+
+ return value;
+}
+
+/**
+ \brief get CORE timer reload high value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint64_t csi_clint_get_load(unsigned long coret_base)
+{
+ return _csi_clint_get_load2(coret_base, 0);
+}
+
+__STATIC_INLINE uint32_t _csi_clint_get_loadh2(unsigned long coret_base, uint16_t hartid)
+{
+ CLINT_Type *clint = (CLINT_Type *)coret_base;
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ uint64_t value = (((uint64_t)CLINT_TIMECMPn_VAL(&clint->STIMECMPH0, hartid)) << 32) + \
+ (uint64_t)CLINT_TIMECMPn_VAL(&clint->STIMECMPL0, hartid);
+#else
+ uint64_t value = (((uint64_t)CLINT_TIMECMPn_VAL(&clint->MTIMECMPH0, hartid)) << 32) + \
+ (uint64_t)CLINT_TIMECMPn_VAL(&clint->MTIMECMPL0, hartid);
+#endif
+
+ return (value >> 32) & 0xFFFFFFFF;
+}
+
+/**
+ \brief get CORE timer reload high value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint32_t csi_clint_get_loadh(unsigned long coret_base)
+{
+ return _csi_clint_get_loadh2(coret_base, 0);
+}
+
+/**
+ \brief get CORE timer counter value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE unsigned long csi_clint_get_value(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, time" : "=r"(result));
+ return result;
+}
+
+/**
+ \brief get CORE timer counter high value(deprecated)
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint32_t csi_clint_get_valueh(void)
+{
+ uint64_t result;
+ __ASM volatile("csrr %0, time" : "=r"(result));
+ return (result >> 32) & 0xFFFFFFFF;
+}
+
+/**
+ \brief CORE timer Configuration
+ \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
+ Counter is in free running mode to generate periodic interrupts.
+ \param [in] ticks Number of ticks between two interrupts.
+ \param [in] IRQn core timer Interrupt number.
+ \return 0 Function succeeded.
+ \return 1 Function failed.
+ \note When the variable __Vendor_SysTickConfig is set to 1, then the
+ function SysTick_Config is not included. In this case, the file device.h
+ must contain a vendor-specific implementation of this function.
+ */
+__STATIC_INLINE uint32_t csi_coret_config(uint64_t ticks, int32_t IRQn)
+{
+ return _csi_clint_config2(CORET_BASE, csi_get_cpu_id(), ticks, IRQn);
+}
+
+/**
+ \brief get CORE timer reload value
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint64_t csi_coret_get_load2(void)
+{
+ return _csi_clint_get_load2(CORET_BASE, csi_get_cpu_id());
+}
+
+/**
+ \brief get CORE timer counter value
+ \return CORE timer counter value.
+ */
+__STATIC_INLINE uint64_t csi_coret_get_value2()
+{
+#if __riscv_xlen == 64
+ return csi_clint_get_value();
+#else
+ uint64_t result;
+ unsigned long high, low;
+
+ __ASM volatile("csrr %0, timeh" : "=r"(high));
+ __ASM volatile("csrr %0, time" : "=r"(low));
+ result = ((uint64_t)high << 32) | low;
+
+ return result;
+#endif
+}
+
+/**
+ \brief Enable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void csi_coret_irq_enable(void)
+{
+#if CONFIG_INTC_CLIC_PLIC
+ extern void soc_irq_enable(uint32_t irq_num);
+ return soc_irq_enable(7);
+#else
+ return __enable_coret_irq();
+#endif
+}
+
+/**
+ \brief Disable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void csi_coret_irq_disable(void)
+{
+#if CONFIG_INTC_CLIC_PLIC
+ extern void soc_irq_disable(uint32_t irq_num);
+ return soc_irq_disable(7);
+#else
+ return __disable_coret_irq();
+#endif
+}
+
+
+/*@} end of CSI_core_DebugFunctions */
+
+/* ########################## Cache functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_CacheFunctions Cache Functions
+ \brief Functions that configure Instruction and Data cache.
+ @{
+ */
+
+/**
+ \brief whether I-Cache enable
+ */
+__STATIC_INLINE int csi_icache_is_enable()
+{
+ uint32_t cache = __get_MHCR();
+ return (cache & CACHE_MHCR_IE_Msk) >> CACHE_MHCR_IE_Pos;
+}
+
+/**
+ \brief Enable I-Cache
+ \details Turns on I-Cache
+ */
+__STATIC_INLINE void csi_icache_enable(void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ if (!csi_icache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ __ICACHE_IALL();
+ cache = __get_MHCR();
+ cache |= CACHE_MHCR_IE_Msk;
+ __set_MHCR(cache);
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Disable I-Cache
+ \details Turns off I-Cache
+ */
+__STATIC_INLINE void csi_icache_disable(void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ if (csi_icache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ cache = __get_MHCR();
+ cache &= ~CACHE_MHCR_IE_Msk; /* disable icache */
+ __set_MHCR(cache);
+ __ICACHE_IALL(); /* invalidate all icache */
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Invalidate I-Cache
+ \details Invalidates I-Cache
+ */
+__STATIC_INLINE void csi_icache_invalid(void)
+{
+#if (__ICACHE_PRESENT == 1U)
+ __DSB();
+ __ICACHE_IALL(); /* invalidate all icache */
+ __DSB();
+#endif
+}
+
+/**
+ \brief whether D-Cache enable
+ */
+__STATIC_INLINE int csi_dcache_is_enable()
+{
+ uint32_t cache = __get_MHCR();
+ return (cache & CACHE_MHCR_DE_Msk) >> CACHE_MHCR_DE_Pos;
+}
+
+/**
+ \brief Enable D-Cache
+ \details Turns on D-Cache
+ */
+__STATIC_INLINE void csi_dcache_enable(void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ if (!csi_dcache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ __DCACHE_IALL(); /* invalidate all dcache */
+ cache = __get_MHCR();
+ cache |= CACHE_MHCR_DE_Msk; /* enable dcache */
+ __set_MHCR(cache);
+
+ __DSB();
+ }
+#endif
+}
+
+
+/**
+ \brief Disable D-Cache
+ \details Turns off D-Cache
+ */
+__STATIC_INLINE void csi_dcache_disable(void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ if (csi_dcache_is_enable()) {
+ uint32_t cache;
+ __DSB();
+ cache = __get_MHCR();
+ cache &= ~(uint32_t)CACHE_MHCR_DE_Msk; /* disable all Cache */
+ __set_MHCR(cache);
+ __DCACHE_IALL(); /* invalidate all Cache */
+ __DSB();
+ }
+#endif
+}
+
+/**
+ \brief Invalidate D-Cache
+ \details Invalidates D-Cache
+ */
+__STATIC_INLINE void csi_dcache_invalid(void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_IALL(); /* invalidate all Cache */
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief Clean D-Cache
+ \details Cleans D-Cache
+ */
+__STATIC_INLINE void csi_dcache_clean(void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_CALL(); /* clean all Cache */
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief Clean & Invalidate D-Cache
+ \details Cleans and Invalidates D-Cache
+ */
+__STATIC_INLINE void csi_dcache_clean_invalid(void)
+{
+#if (__DCACHE_PRESENT == 1U)
+ __DSB();
+ __DCACHE_CIALL(); /* clean and inv all Cache */
+ __DSB();
+#endif
+}
+
+/**
+ \brief D-Cache Invalidate by address
+ \details Invalidates D-Cache for the given address
+ \param[in] addr address (aligned to 64-byte boundary)
+ \param[in] dsize size of memory block (in number of bytes)
+*/
+__STATIC_INLINE void csi_dcache_invalid_range(unsigned long *addr, size_t dsize)
+{
+#if (__DCACHE_PRESENT == 1U)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long)addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+#if CBO_INSN_SUPPORT
+ while (op_size > 0) {
+ __CBO_INVAL(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+#else
+ cpu_work_mode_t cpu_work_mode;
+ cpu_work_mode = (cpu_work_mode_t)__get_CPU_WORK_MODE();
+
+ if (cpu_work_mode == MACHINE_MODE) {
+ while (op_size > 0) {
+ __DCACHE_IPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ } else if (cpu_work_mode == SUPERVISOR_MODE) {
+ while (op_size > 0) {
+ __DCACHE_IVA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ }
+#endif
+
+ __SYNC_IS();
+ __DSB();
+#endif
+}
+
+
+/**
+ \brief D-Cache Clean by address
+ \details Cleans D-Cache for the given address
+ \param[in] addr address (aligned to 64-byte boundary)
+ \param[in] dsize size of memory block (in number of bytes)
+*/
+__STATIC_INLINE void csi_dcache_clean_range(unsigned long *addr, size_t dsize)
+{
+
+#if (__DCACHE_PRESENT == 1)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long) addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+#if CBO_INSN_SUPPORT
+ while (op_size > 0) {
+ __CBO_CLEAN(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+#else
+ cpu_work_mode_t cpu_work_mode;
+ cpu_work_mode = (cpu_work_mode_t)__get_CPU_WORK_MODE();
+
+ if (cpu_work_mode == MACHINE_MODE) {
+ while (op_size > 0) {
+ __DCACHE_CPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ } else if (cpu_work_mode == SUPERVISOR_MODE) {
+ while (op_size > 0) {
+ __DCACHE_CVA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ }
+#endif
+ __SYNC_IS();
+ __DSB();
+#endif
+
+}
+
+
+/**
+ \brief D-Cache Clean and Invalidate by address
+ \details Cleans and invalidates D_Cache for the given address
+ \param[in] addr address (aligned to 64-byte boundary)
+ \param[in] dsize size of memory block (aligned to 64-byte boundary)
+*/
+__STATIC_INLINE void csi_dcache_clean_invalid_range(unsigned long *addr, size_t dsize)
+{
+#if (__DCACHE_PRESENT == 1U)
+ int linesize = csi_get_cache_line_size();
+ long op_size = dsize + (unsigned long)addr % linesize;
+ unsigned long op_addr = (unsigned long) addr & CACHE_INV_ADDR_Msk;
+
+ __DSB();
+#if CBO_INSN_SUPPORT
+ while (op_size > 0) {
+ __CBO_FLUSH(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+#else
+ cpu_work_mode_t cpu_work_mode;
+ cpu_work_mode = (cpu_work_mode_t)__get_CPU_WORK_MODE();
+
+ if (cpu_work_mode == MACHINE_MODE) {
+ while (op_size > 0) {
+ __DCACHE_CIPA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ } else if (cpu_work_mode == SUPERVISOR_MODE) {
+ while (op_size > 0) {
+ __DCACHE_CIVA(op_addr);
+ op_addr += linesize;
+ op_size -= linesize;
+ }
+ }
+#endif
+
+ __SYNC_IS();
+ __DSB();
+#endif
+}
+
+/*@} end of CSI_Core_CacheFunctions */
+
+/* ########################## FPP functions #################################### */
+/**
+ \ingroup CSI_Core_FPPFunctionInterface
+ \defgroup CSI_Core_FPPFunctions FPP Functions
+ \brief Functions that configure FPP.
+ @{
+ */
+
+/**
+ \ingroup CSI_fpp_register
+ \defgroup CSI_FPP
+ \brief Type definitions for the FPP Registers
+ @{
+ */
+
+/**
+ \brief Consortium definition for Machine Mode FPP Configuration register(MFPPCR, 0xBC0).
+ */
+typedef union {
+ struct {
+ uint64_t EN: 1; /*!< bit: 0 FPP enable */
+ uint64_t _reversed1: 11; /*!< bit: 1 11 Reserved */
+ uint64_t Base_Address: 52; /*!< bit: 12 63 Base Address */
+ } b; /*!< Structure Access by bit */
+ uint64_t w; /*!< Type Access by whole register */
+} MFPPCR_Type;
+
+#define MFPPCR_Base_Address_Pos 12U /*!< MFPPCR: Base_Address Position */
+#define MFPPCR_Base_Address_Msk (0xFFFFFFFFFFFFFULL << MFPPCR_Base_Address_Pos) /*!< MFPPCR: Base_Address Mask */
+
+#define MFPPCR_Base_EN_Pos 0U /*!< MFPPCR: Enable Bit Position */
+#define MFPPCR_Base_EN_Msk (0x1U << MFPPCR_Base_EN_Pos) /*!< MFPPCR: Enable Bit Mask */
+
+/*@} end of group CSI_FPP_bitfield */
+
+/**
+ \brief Enable FPP
+ \details Turns on FPP
+ */
+__STATIC_INLINE void csi_fpp_enable(void)
+{
+ __set_MFPPCR(__get_MFPPCR() | MFPPCR_Base_EN_Msk);
+}
+
+/**
+ \brief Disable FPP
+ \details Turns off FPP
+ */
+__STATIC_INLINE void csi_fpp_disable(void)
+{
+ __set_MFPPCR(__get_MFPPCR() & (~MFPPCR_Base_EN_Msk));
+}
+
+/**
+ \brief Set FPP Base Address
+ \details Set FPP Base Address
+ \param [in] base_addr FPP Base Address.
+ */
+__STATIC_INLINE void csi_fpp_set_base_addr(unsigned long base_addr)
+{
+ __set_MFPPCR((__get_MFPPCR() & (~MFPPCR_Base_Address_Msk))
+ | ((base_addr << MFPPCR_Base_Address_Pos) & MFPPCR_Base_Address_Msk));
+}
+
+/*@} end of CSI_Core_FPPFunctions */
+
+
+/* ########################## MMU functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_MMUFunctions MMU Functions
+ \brief Functions that configure MMU.
+ @{
+ */
+
+typedef enum {
+ PAGE_SIZE_4KB = 0x1000,
+ PAGE_SIZE_2MB = 0x200000,
+ PAGE_SIZE_1GB = 0x40000000,
+} page_size_e;
+
+#define MMU_MODE_32 (0x1)
+#define MMU_MODE_39 (0x8)
+#define MMU_MODE_48 (0x9)
+#define MMU_MODE_57 (0xa)
+#define MMU_MODE_64 (0xb)
+
+/**
+ \brief set mmu mode(If there are multiple mmu modes)
+ \param[in] mode mode of the mmu
+ \details
+ */
+__STATIC_INLINE void csi_mmu_set_mode(int mode)
+{
+ extern int g_mmu_mode;
+ g_mmu_mode = mode;
+}
+
+/**
+ \brief enable mmu
+ \details
+ */
+__STATIC_INLINE void csi_mmu_enable()
+{
+ extern int g_mmu_mode;
+#if __riscv_xlen == 64
+ __set_SATP(__get_SATP() | ((unsigned long)g_mmu_mode << 60));
+#else
+ __set_SATP(__get_SATP() | ((unsigned long)g_mmu_mode << 31));
+#endif
+}
+
+/**
+ \brief disable mmu
+ \details
+ */
+__STATIC_INLINE void csi_mmu_disable(void)
+{
+#if __riscv_xlen == 64
+ __set_SATP(__get_SATP() & (~((unsigned long)0xf << 60)));
+#else
+ __set_SATP(__get_SATP() & (~((unsigned long)0x1 << 31)));
+#endif
+}
+
+/**
+ \brief flush all mmu tlb.
+ \details
+ */
+__STATIC_INLINE void csi_mmu_invalid_tlb_all(void)
+{
+ __ASM volatile("sfence.vma" : : : "memory");
+}
+
+/*@} end of CSI_Core_MMUFunctions */
+
+/* ########################## TCM functions #################################### */
+/**
+ \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_TCMFunctions TCM Functions
+ \brief Functions that configure TCM.
+ @{
+ */
+
+#if CONFIG_CPU_XUANTIE_C907 || CONFIG_CPU_XUANTIE_C907FD || CONFIG_CPU_XUANTIE_C907FDV || CONFIG_CPU_XUANTIE_C907FDVM \
+ || CONFIG_CPU_XUANTIE_C908 || CONFIG_CPU_XUANTIE_C908V || CONFIG_CPU_XUANTIE_C908I \
+ || CONFIG_CPU_XUANTIE_C908X || CONFIG_CPU_XUANTIE_C908X_CP || CONFIG_CPU_XUANTIE_C908X_CP_XT \
+ || CONFIG_CPU_XUANTIE_C910 || CONFIG_CPU_XUANTIE_C920 \
+ || CONFIG_CPU_XUANTIE_C910V2 || CONFIG_CPU_XUANTIE_C920V2 \
+ || CONFIG_CPU_XUANTIE_C910V3 || CONFIG_CPU_XUANTIE_C920V3 \
+ || CONFIG_CPU_XUANTIE_C910V3_CP || CONFIG_CPU_XUANTIE_C920V3_CP \
+ || CONFIG_CPU_XUANTIE_C910V3_CP_XT || CONFIG_CPU_XUANTIE_C920V3_CP_XT \
+ || CONFIG_CPU_XUANTIE_R908 || CONFIG_CPU_XUANTIE_R908FD || CONFIG_CPU_XUANTIE_R908FDV \
+ || CONFIG_CPU_XUANTIE_R908_CP || CONFIG_CPU_XUANTIE_R908FD_CP || CONFIG_CPU_XUANTIE_R908FDV_CP \
+ || CONFIG_CPU_XUANTIE_R908_CP_XT || CONFIG_CPU_XUANTIE_R908FD_CP_XT || CONFIG_CPU_XUANTIE_R908FDV_CP_XT \
+ || CONFIG_CPU_XUANTIE_R910 || CONFIG_CPU_XUANTIE_R920
+/**
+ \ingroup CSI_tcm_register
+ \defgroup CSI_TCM
+ \brief Type definitions for the tcm Registers
+ @{
+ */
+
+/**
+ \brief Consortium definition for accessing protection area selection register(MITCMCR, 0x7f9).
+ */
+typedef union {
+ struct {
+ unsigned long EN: 1; /*!< bit: 0 Instruction Tightly-Coupled Memory enable */
+ unsigned long ECC_EN: 1; /*!< bit: 1 ecc_en */
+ unsigned long Interleave: 1; /*!< bit: 2 Interleave */
+ unsigned long _reserved1: 1; /*!< bit: 3 Reserved */
+ unsigned long Size: 4; /*!< bit: 4..7 Size of ITCM */
+ unsigned long _reserved2: 4; /*!< bit: 8..11 Reserved */
+ unsigned long Base_Address: 52; /*!< bit: 12..63 Base address of DTCM */
+ } b; /*!< Structure Access by bit */
+ unsigned long w; /*!< Type Access by whole register */
+} MITCMCR_Type;
+
+#define MITCMCR_Base_Address_Pos 12U /*!< MITCMCR: Base_Address Position */
+#define MITCMCR_Base_Address_Msk (0xfffffffffffffULL << MITCMCR_Base_Address_Pos) /*!< MITCMCR: Base_Address Mask */
+
+#define MITCMCR_Size_Pos 4U /*!< MITCMCR: Size Position */
+#define MITCMCR_Size_Msk (0xfULL << MITCMCR_Size_Pos) /*!< MITCMCR: Size Mask */
+
+#define MITCMCR_INTERLEAVE_Pos 2U /*!< MITCMCR: Interleave Position */
+#define MITCMCR_INTERLEAVE_Msk (0x1ULL << MITCMCR_INTERLEAVE_Pos) /*!< MITCMCR: Interleave Mask */
+
+#define MITCMCR_ECC_EN_Pos 1U /*!< MITCMCR: ECC_EN Position */
+#define MITCMCR_ECC_EN_Msk (0x1ULL << MITCMCR_ECC_EN_Pos) /*!< MITCMCR: ECC_EN Mask */
+
+#define MITCMCR_EN_Pos 0U /*!< MITCMCR: EN Position */
+#define MITCMCR_EN_Msk (0x1ULL << MITCMCR_EN_Pos) /*!< MITCMCR: EN Mask */
+
+/**
+ \brief Consortium definition for accessing protection area selection register(MDTCMCR, 0x7f8).
+ */
+typedef union {
+ struct {
+ unsigned long EN: 1; /*!< bit: 0 Data Tightly-Coupled Memory enable */
+ unsigned long ECC_EN: 1; /*!< bit: 1 ecc_en */
+ unsigned long Interleave: 1; /*!< bit: 2 Interleave */
+ unsigned long _reserved1: 1; /*!< bit: 3 Reserved */
+ unsigned long Size: 4; /*!< bit: 4..7 Size of ITCM */
+ unsigned long _reserved2: 4; /*!< bit: 8..11 Reserved */
+ unsigned long Base_Address: 52; /*!< bit: 12..63 Base address of DTCM */
+ } b; /*!< Structure Access by bit */
+ unsigned long w; /*!< Type Access by whole register */
+} MDTCMCR_Type;
+
+#define MDTCMCR_Base_Address_Pos 12U /*!< MDTCMCR: Base_Address Position */
+#define MDTCMCR_Base_Address_Msk (0xfffffffffffffULL << MDTCMCR_Base_Address_Pos) /*!< MDTCMCR: Base_Address Mask */
+
+#define MDTCMCR_Size_Pos 4U /*!< MDTCMCR: Size Position */
+#define MDTCMCR_Size_Msk (0xfULL << MDTCMCR_Size_Pos) /*!< MDTCMCR: Size Mask */
+
+#define MDTCMCR_INTERLEAVE_Pos 2U /*!< MDTCMCR: Interleave Position */
+#define MDTCMCR_INTERLEAVE_Msk (0x1ULL << MDTCMCR_INTERLEAVE_Pos) /*!< MDTCMCR: Interleave Mask */
+
+#define MDTCMCR_ECC_EN_Pos 1U /*!< MDTCMCR: ECC_EN Position */
+#define MDTCMCR_ECC_EN_Msk (0x1ULL << MDTCMCR_ECC_EN_Pos) /*!< MDTCMCR: ECC_EN Mask */
+
+#define MDTCMCR_EN_Pos 0U /*!< MDTCMCR: EN Position */
+#define MDTCMCR_EN_Msk (0x1ULL << MDTCMCR_EN_Pos) /*!< MDTCMCR: EN Mask */
+
+/*@} end of group CSI_TCM_bitfield */
+
+/**
+ \brief Enable ITCM
+ \details Turns on ITCM
+ */
+__STATIC_INLINE void csi_itcm_enable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() | MITCMCR_EN_Msk);
+}
+
+/**
+ \brief Enable DTCM
+ \details Turns on DTCM
+ */
+__STATIC_INLINE void csi_dtcm_enable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() | MDTCMCR_EN_Msk);
+}
+
+/**
+ \brief Enable ITCM
+ \details Turns on ITCM
+ */
+__STATIC_INLINE void csi_itcm_disable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() & (~MITCMCR_EN_Msk));
+}
+
+/**
+ \brief Enable DTCM
+ \details Turns on DTCM
+ */
+__STATIC_INLINE void csi_dtcm_disable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() & (~MDTCMCR_EN_Msk));
+}
+
+/**
+ \brief Get ITCM Size
+ \details Get ITCM Size
+ \return ITCM size (bytes).
+ */
+__STATIC_INLINE uint32_t csi_itcm_get_size(void)
+{
+ MITCMCR_Type sizemask;
+ uint32_t ret;
+
+ sizemask.w = __get_MITCMCR();
+ switch (sizemask.b.Size)
+ {
+ case 0x3: ret = 8 << 10; break;
+ case 0x4: ret = 16 << 10; break;
+ case 0x5: ret = 32 << 10; break;
+ case 0x6: ret = 64 << 10; break;
+ case 0x7: ret = 128 << 10; break;
+ case 0x8: ret = 256 << 10; break;
+ case 0x9: ret = 512 << 10; break;
+ case 0xa: ret = 1024 << 10; break;
+ default: ret = 0; break;
+ }
+ return ret;
+}
+
+/**
+ \brief Get DTCM Size
+ \details Get DTCM Size
+ \return DTCM size (bytes).
+ */
+__STATIC_INLINE uint32_t csi_dtcm_get_size(void)
+{
+ MDTCMCR_Type sizemask;
+ uint32_t ret;
+
+ sizemask.w = __get_MDTCMCR();
+ switch (sizemask.b.Size)
+ {
+ case 0x3: ret = 8 << 10; break;
+ case 0x4: ret = 16 << 10; break;
+ case 0x5: ret = 32 << 10; break;
+ case 0x6: ret = 64 << 10; break;
+ case 0x8: ret = 128 << 10; break;
+ case 0x9: ret = 256 << 10; break;
+ case 0xa: ret = 512 << 10; break;
+ case 0xb: ret = 1024 << 10; break;
+ default:ret = 0; break;
+ }
+ return ret;
+}
+
+/**
+ \brief Set ITCM Base Address
+ \details Set ITCM Base Address
+ \param [in] base_addr itcm base address.
+ */
+__STATIC_INLINE void csi_itcm_set_base_addr(unsigned long base_addr)
+{
+ __set_MITCMCR((__get_MITCMCR() & (~MITCMCR_Base_Address_Msk)) | (base_addr << MITCMCR_Base_Address_Pos));
+}
+
+/**
+ \brief Set DTCM Base Address
+ \details Set DTCM Base Address
+ \param [in] base_addr dtcm base address.
+ */
+__STATIC_INLINE void csi_dtcm_set_base_addr(unsigned long base_addr)
+{
+ __set_MDTCMCR((__get_MDTCMCR() & (~MDTCMCR_Base_Address_Msk)) | (base_addr << MDTCMCR_Base_Address_Pos));
+}
+
+/*@} end of CSI_Core_TCMFunctions */
+
+/* ########################## ECC functions #################################### */
+
+/**
+ * \brief Enable ITCM-ECC
+ * \details Turns on ITCM-ECC
+ * */
+__STATIC_INLINE void csi_itcm_ecc_enable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() | MITCMCR_ECC_EN_Msk);
+}
+
+/**
+ * \brief Disable ITCM-ECC
+ * \details Turns off ITCM-ECC
+ * */
+__STATIC_INLINE void csi_itcm_ecc_disable (void)
+{
+ __set_MITCMCR(__get_MITCMCR() & (~MITCMCR_ECC_EN_Msk));
+}
+
+/**
+ * \brief Enable DTCM-ECC
+ * \details Turns on DTCM-ECC
+ * */
+__STATIC_INLINE void csi_dtcm_ecc_enable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() | MDTCMCR_ECC_EN_Msk);
+}
+
+/**
+ * \brief Disable DTCM-ECC
+ * \details Turns off DTCM-ECC
+ * */
+__STATIC_INLINE void csi_dtcm_ecc_disable (void)
+{
+ __set_MDTCMCR(__get_MDTCMCR() & (~MDTCMCR_ECC_EN_Msk));
+}
+
+/*@} end of CSI_Core_ECCFunctions */
+#endif /* end ecc */
+
+/* ################################## IRQ Functions ############################################ */
+
+/**
+ \brief Save the Irq context
+ \details save the psr result before disable irq.
+ */
+__STATIC_INLINE unsigned long csi_irq_save(void)
+{
+ unsigned long result;
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ result = __get_SSTATUS();
+#else
+ result = __get_MSTATUS();
+#endif
+ __disable_irq();
+ return(result);
+}
+
+/**
+ \brief Restore the Irq context
+ \details restore saved primask state.
+ \param [in] irq_state psr irq state.
+ */
+__STATIC_INLINE void csi_irq_restore(unsigned long irq_state)
+{
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ __set_SSTATUS(irq_state);
+#else
+ __set_MSTATUS(irq_state);
+#endif
+}
+
+/*@} end of IRQ Functions */
+
+/**
+ \brief Get the byte-width of vector register
+ \return the byte-width of vector register
+ */
+__STATIC_INLINE int csi_vlenb_get_value(void)
+{
+ int result;
+ __ASM volatile("csrr %0, vlenb" : "=r"(result) : : "memory");
+ return result;
+}
+
+#if __riscv_matrix || __riscv_xtheadmatrix
+/**
+ \brief Get the bytes of matrix per register
+ \return the bytes of matrix per register
+ */
+__STATIC_INLINE int csi_xmlenb_get_value(void)
+{
+ int result;
+ __ASM volatile("csrr %0, xmlenb" : "=r"(result) : : "memory");
+ return result;
+}
+#endif /* __riscv_matrix || __riscv_xtheadmatrix */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CORE_RV32_H_DEPENDANT */
+
+#endif /* __CSI_GENERIC */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv32_gcc.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv32_gcc.h
new file mode 100644
index 000000000..4c7d540cf
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv32_gcc.h
@@ -0,0 +1,3374 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file csi_rv32_gcc.h
+ * @brief CSI Header File for GCC.
+ * @version V1.0
+ * @date 01. Sep 2018
+ ******************************************************************************/
+
+#ifndef _CSI_RV32_GCC_H_
+#define _CSI_RV32_GCC_H_
+
+#include
+
+#if CONFIG_CPU_XUANTIE_E906 || CONFIG_CPU_XUANTIE_E906F || CONFIG_CPU_XUANTIE_E906FD || CONFIG_CPU_XUANTIE_E906P || CONFIG_CPU_XUANTIE_E906FP || CONFIG_CPU_XUANTIE_E906FDP \
+ || CONFIG_CPU_XUANTIE_E907 || CONFIG_CPU_XUANTIE_E907F || CONFIG_CPU_XUANTIE_E907FD || CONFIG_CPU_XUANTIE_E907P || CONFIG_CPU_XUANTIE_E907FP || CONFIG_CPU_XUANTIE_E907FDP \
+ || CONFIG_CPU_XUANTIE_E902 || CONFIG_CPU_XUANTIE_E902M || CONFIG_CPU_XUANTIE_E902T || CONFIG_CPU_XUANTIE_E902MT \
+ || CONFIG_CPU_XUANTIE_E901PLUS_CP || CONFIG_CPU_XUANTIE_E901PLUS_B_CP || CONFIG_CPU_XUANTIE_E901PLUS_M_CP || CONFIG_CPU_XUANTIE_E901PLUS_BM_CP \
+ || CONFIG_CPU_XUANTIE_E901_CP || CONFIG_CPU_XUANTIE_E901_B_CP || CONFIG_CPU_XUANTIE_E901_ZM_CP || CONFIG_CPU_XUANTIE_E901_BZM_CP
+#define CONFIG_CPU_XUANTIE_E9XX 1
+#endif
+
+/* ########################### Core Function Access ########################### */
+/** \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_RegAccFunctions CSI Core Register Access Functions
+ @{
+ */
+/**
+ \brief Enable IRQ Interrupts
+ \details Enables IRQ interrupts by setting the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __enable_irq(void)
+{
+ __ASM volatile("csrs mstatus, 8");
+}
+
+/**
+ \brief Disable IRQ Interrupts
+ \details Disables IRQ interrupts by clearing the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __disable_irq(void)
+{
+ __ASM volatile("csrc mstatus, 8");
+}
+
+/**
+ \brief Get MXSTATUS
+ \details Returns the content of the MXSTATUS Register.
+ \return MXSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MXSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mxstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MXSTATUS
+ \details Writes the given value to the MXSTATUS Register.
+ \param [in] MXSTATUS Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MXSTATUS(unsigned long mxstatus)
+{
+ __ASM volatile("csrw mxstatus, %0" : : "r"(mxstatus));
+}
+
+/**
+ \brief Get MEXSTATUS
+ \details Returns the content of the MEXSTATUS Register.
+ \return MEXSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEXSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mexstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MEXSTATUS
+ \details Writes the given value to the MSTATUS Register.
+ \param [in] MEXSTATUS Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MEXSTATUS(unsigned long mexstatus)
+{
+ __ASM volatile("csrw mexstatus, %0" : : "r"(mexstatus));
+}
+
+
+/**
+ \brief Get MRADDR
+ \details Returns the content of the MRADDR Register.
+ \return MRADDR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MRADDR(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mraddr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get FXCR
+ \details Returns the content of the FXCR Register.
+ \return FXCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_FXCR(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, fxcr" : "=r"(result));
+ return (result);
+}
+
+
+/**
+ \brief Set FXCR
+ \details Writes the given value to the FXCR Register.
+ \param [in] FXCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_FXCR(unsigned long fxcr)
+{
+ __ASM volatile("csrw fxcr, %0" : : "r"(fxcr));
+}
+
+/**
+ \brief Get MSTATUS
+ \details Returns the content of the MSTATUS Register.
+ \return MSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSTATUS
+ \details Writes the given value to the MSTATUS Register.
+ \param [in] mstatus MSTATUS Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSTATUS(unsigned long mstatus)
+{
+ __ASM volatile("csrw mstatus, %0" : : "r"(mstatus));
+}
+
+/**
+ \brief Get MHCR
+ \details Returns the content of the MHCR Register.
+ \return MHCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHCR(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MHCR
+ \details Writes the given value to the MHCR Register.
+ \param [in] MHCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHCR(unsigned long mhcr)
+{
+ __ASM volatile("csrw mhcr, %0" : : "r"(mhcr));
+}
+
+/**
+ \brief Get MHINT
+ \details Returns the content of the MHINT Register.
+ \return MHINT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHINT(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhint" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MHINT
+ \details Writes the given value to the MHINT Register.
+ \param [in] MHINT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHINT(unsigned long mhint)
+{
+ __ASM volatile("csrw mhint, %0" : : "r"(mhint));
+}
+
+/**
+ \brief Get MISA Register
+ \details Returns the content of the MISA Register.
+ \return MISA Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MISA(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, misa" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MISA
+ \details Writes the given value to the MISA Register.
+ \param [in] misa MISA Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MISA(unsigned long misa)
+{
+ __ASM volatile("csrw misa, %0" : : "r"(misa));
+}
+
+/**
+ \brief Get MIE Register
+ \details Returns the content of the MIE Register.
+ \return MIE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mie" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MIE
+ \details Writes the given value to the MIE Register.
+ \param [in] mie MIE Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MIE(unsigned long mie)
+{
+ __ASM volatile("csrw mie, %0" : : "r"(mie));
+}
+
+/**
+ \brief Get MTVEC Register
+ \details Returns the content of the MTVEC Register.
+ \return MTVEC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVEC(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtvec" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MTVEC
+ \details Writes the given value to the MTVEC Register.
+ \param [in] mtvec MTVEC Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MTVEC(unsigned long mtvec)
+{
+ __ASM volatile("csrw mtvec, %0" : : "r"(mtvec));
+}
+
+/**
+ \brief Set MTVT
+ \details Writes the given value to the MTVT Register.
+ \param [in] mtvt MTVT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MTVT(unsigned long mtvt)
+{
+ __ASM volatile("csrw mtvt, %0" : : "r"(mtvt));
+}
+
+/**
+ \brief Get MTVT Register
+ \details Returns the content of the MTVT Register.
+ \return MTVT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVT(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtvt" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTIME
+ \details Returns the content of the MTIME Register.
+ \return MTIME Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTIME(void)
+{
+ unsigned long result;
+ __ASM volatile("rdtime %0" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTIMEH
+ \details Returns the content of the MTIME Register.
+ \return MTIME Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTIMEH(void)
+{
+ unsigned long result;
+ __ASM volatile("rdtimeh %0" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get SP
+ \details Returns the content of the SP Register.
+ \return SP Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SP(void)
+{
+ unsigned long result;
+
+ __ASM volatile("mv %0, sp" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SP
+ \details Writes the given value to the SP Register.
+ \param [in] sp SP Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SP(unsigned long sp)
+{
+ __ASM volatile("mv sp, %0" : : "r"(sp): "sp");
+}
+
+/**
+ \brief Get MSCRATCH Register
+ \details Returns the content of the MSCRATCH Register.
+ \return MSCRATCH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSCRATCH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mscratch" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSCRATCH
+ \details Writes the given value to the MSCRATCH Register.
+ \param [in] mscratch MSCRATCH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSCRATCH(unsigned long mscratch)
+{
+ __ASM volatile("csrw mscratch, %0" : : "r"(mscratch));
+}
+
+/**
+ \brief Get MEPC Register
+ \details Returns the content of the MEPC Register.
+ \return MEPC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEPC(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mepc" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MEPC
+ \details Writes the given value to the MEPC Register.
+ \param [in] mepc MEPC Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MEPC(unsigned long mepc)
+{
+ __ASM volatile("csrw mepc, %0" : : "r"(mepc));
+}
+
+/**
+ \brief Get MCAUSE Register
+ \details Returns the content of the MCAUSE Register.
+ \return MCAUSE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCAUSE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcause" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MNXTI Register
+ \details Returns the content of the MNXTI Register.
+ \return MNXTI Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MNXTI(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mnxti" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MNXTI
+ \details Writes the given value to the MNXTI Register.
+ \param [in] mnxti MNXTI Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MNXTI(unsigned long mnxti)
+{
+ __ASM volatile("csrw mnxti, %0" : : "r"(mnxti));
+}
+
+/**
+ \brief Get MINTSTATUS Register
+ \details Returns the content of the MINTSTATUS Register.
+ \return MINTSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINTSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mintstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTVAL Register
+ \details Returns the content of the MTVAL Register.
+ \return MTVAL Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVAL(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtval" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MIP Register
+ \details Returns the content of the MIP Register.
+ \return MIP Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIP(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mip" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MIP
+ \details Writes the given value to the MIP Register.
+ \param [in] mip MIP Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MIP(unsigned long mip)
+{
+ __ASM volatile("csrw mip, %0" : : "r"(mip));
+}
+
+/**
+ \brief Get MCYCLEL Register
+ \details Returns the content of the MCYCLEL Register.
+ \return MCYCLE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCYCLE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcycle" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCYCLE
+ \details Write MCYCLE Register
+ \param [in] value MCYCLE Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCYCLE(unsigned long value)
+{
+ __ASM volatile("csrw mcycle, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MCYCLEH Register
+ \details Returns the content of the MCYCLEH Register.
+ \return MCYCLEH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCYCLEH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcycleh" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCYCLEH
+ \details Write MCYCLEH Register
+ \param [in] value MCYCLEH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCYCLEH(unsigned long value)
+{
+ __ASM volatile("csrw mcycleh, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MINSTRET Register
+ \details Returns the content of the MINSTRET Register.
+ \return MINSTRET Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINSTRET(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, minstret" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MINSTRET
+ \details Write MINSTRET Register
+ \param [in] value MINSTRET Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MINSTRET(unsigned long value)
+{
+ __ASM volatile("csrw minstret, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MINSTRETH Register
+ \details Returns the content of the MINSTRETH Register.
+ \return MINSTRETH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINSTRETH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, minstreth" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MINSTRETH
+ \details Write MINSTRETH Register
+ \param [in] value MINSTRETH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MINSTRETH(unsigned long value)
+{
+ __ASM volatile("csrw minstreth, %0" : : "r"(value));
+}
+
+#if (CONFIG_CPU_XUANTIE_E907 || CONFIG_CPU_XUANTIE_E907F || CONFIG_CPU_XUANTIE_E907FD || CONFIG_CPU_XUANTIE_E907P || CONFIG_CPU_XUANTIE_E907FP || CONFIG_CPU_XUANTIE_E907FDP)
+/**
+ \brief Get MITCMCR
+ \details Returns the content of the MITCMCR Register.
+ \return MITCMCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MITCMCR(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mitcmcr" : "=r"(result));
+
+ return (result);
+}
+
+/**
+ \brief Set MITCMCR
+ \details Writes the given value to the MITCMCR Register.
+ \param [in] itcmcr MITCMCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MITCMCR(unsigned long mitcmcr)
+{
+ __ASM volatile("csrw mitcmcr, %0" : : "r"(mitcmcr));
+}
+
+/**
+ \brief Get MDTCMCR
+ \details Returns the content of the MDTCMCR Register.
+ \return MDTCMCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MDTCMCR(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mdtcmcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MDTCMCR
+ \details Writes the given value to the MDTCMCR Register.
+ \param [in] dtcmcr MDTCMCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MDTCMCR(unsigned long mdtcmcr)
+{
+ __ASM volatile("csrw mdtcmcr, %0" : : "r"(mdtcmcr));
+}
+#endif /* end e907xx */
+
+/**
+ \brief Set MCOUNTINHIBIT
+ \details Write MCOUNTINHIBIT Register.
+ \param [in] value MCOUNTINHIBIT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCOUNTINHIBIT(uint32_t value)
+{
+ __ASM volatile("csrw mcountinhibit, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MCOUNTINHIBIT
+ \details Read MCOUNTINHIBIT Register
+ \return MCOUNTINHIBIT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned int __get_MCOUNTINHIBIT(void)
+{
+ uint32_t result;
+ __ASM volatile("csrr %0, mcountinhibit" : "=r"(result));
+ return result;
+}
+
+/**
+ \brief Set MHPMEVENT
+ \details Write MHPMEVENT Register
+ \param [in] idx Index of MHPMEVENT Register
+ \param [in] value MHPMEVENT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMEVENT(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 0: rv_csr_write(0x7E0, value); break;
+ case 2: rv_csr_write(0x7E1, value); break;
+ case 3: rv_csr_write(0x323, value); break;
+ case 4: rv_csr_write(0x324, value); break;
+ case 5: rv_csr_write(0x325, value); break;
+ case 6: rv_csr_write(0x326, value); break;
+ case 7: rv_csr_write(0x327, value); break;
+ case 8: rv_csr_write(0x328, value); break;
+ case 9: rv_csr_write(0x329, value); break;
+ case 10: rv_csr_write(0x32a, value); break;
+ case 11: rv_csr_write(0x32b, value); break;
+ case 12: rv_csr_write(0x32c, value); break;
+ case 13: rv_csr_write(0x32d, value); break;
+ case 14: rv_csr_write(0x32e, value); break;
+ case 15: rv_csr_write(0x32f, value); break;
+ case 16: rv_csr_write(0x330, value); break;
+ case 17: rv_csr_write(0x331, value); break;
+ case 18: rv_csr_write(0x332, value); break;
+ case 19: rv_csr_write(0x333, value); break;
+ case 20: rv_csr_write(0x334, value); break;
+ case 21: rv_csr_write(0x335, value); break;
+ case 22: rv_csr_write(0x336, value); break;
+ case 23: rv_csr_write(0x337, value); break;
+ case 24: rv_csr_write(0x338, value); break;
+ case 25: rv_csr_write(0x339, value); break;
+ case 26: rv_csr_write(0x33a, value); break;
+ case 27: rv_csr_write(0x33b, value); break;
+ case 28: rv_csr_write(0x33c, value); break;
+ case 29: rv_csr_write(0x33d, value); break;
+ case 30: rv_csr_write(0x33e, value); break;
+ case 31: rv_csr_write(0x33F, value); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMEVENT
+ \details Read MHPMEVENT Register.
+ \param [in] idx Index of MHPMEVENT Register to read.
+ \return MHPMEVENT Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMEVENT(unsigned long idx)
+{
+ switch (idx) {
+ case 0: return rv_csr_read(0x7E0);
+ case 2: return rv_csr_read(0x7E1);
+ case 3: return rv_csr_read(0x323);
+ case 4: return rv_csr_read(0x324);
+ case 5: return rv_csr_read(0x325);
+ case 6: return rv_csr_read(0x326);
+ case 7: return rv_csr_read(0x327);
+ case 8: return rv_csr_read(0x328);
+ case 9: return rv_csr_read(0x329);
+ case 10: return rv_csr_read(0x32a);
+ case 11: return rv_csr_read(0x32b);
+ case 12: return rv_csr_read(0x32c);
+ case 13: return rv_csr_read(0x32d);
+ case 14: return rv_csr_read(0x32e);
+ case 15: return rv_csr_read(0x32f);
+ case 16: return rv_csr_read(0x330);
+ case 17: return rv_csr_read(0x331);
+ case 18: return rv_csr_read(0x332);
+ case 19: return rv_csr_read(0x333);
+ case 20: return rv_csr_read(0x334);
+ case 21: return rv_csr_read(0x335);
+ case 22: return rv_csr_read(0x336);
+ case 23: return rv_csr_read(0x337);
+ case 24: return rv_csr_read(0x338);
+ case 25: return rv_csr_read(0x339);
+ case 26: return rv_csr_read(0x33a);
+ case 27: return rv_csr_read(0x33b);
+ case 28: return rv_csr_read(0x33c);
+ case 29: return rv_csr_read(0x33d);
+ case 30: return rv_csr_read(0x33e);
+ case 31: return rv_csr_read(0x33F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMEVENTH
+ \details Write MHPMEVENTH Register
+ \param [in] idx Index of MHPMEVENT Register
+ \param [in] value MHPMEVENTH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMEVENTH(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0x723, value); break;
+ case 4: rv_csr_write(0x724, value); break;
+ case 5: rv_csr_write(0x725, value); break;
+ case 6: rv_csr_write(0x726, value); break;
+ case 7: rv_csr_write(0x727, value); break;
+ case 8: rv_csr_write(0x728, value); break;
+ case 9: rv_csr_write(0x729, value); break;
+ case 10: rv_csr_write(0x72A, value); break;
+ case 11: rv_csr_write(0x72B, value); break;
+ case 12: rv_csr_write(0x72C, value); break;
+ case 13: rv_csr_write(0x72D, value); break;
+ case 14: rv_csr_write(0x72E, value); break;
+ case 15: rv_csr_write(0x72F, value); break;
+ case 16: rv_csr_write(0x730, value); break;
+ case 17: rv_csr_write(0x731, value); break;
+ case 18: rv_csr_write(0x732, value); break;
+ case 19: rv_csr_write(0x733, value); break;
+ case 20: rv_csr_write(0x734, value); break;
+ case 21: rv_csr_write(0x735, value); break;
+ case 22: rv_csr_write(0x736, value); break;
+ case 23: rv_csr_write(0x737, value); break;
+ case 24: rv_csr_write(0x738, value); break;
+ case 25: rv_csr_write(0x739, value); break;
+ case 26: rv_csr_write(0x73A, value); break;
+ case 27: rv_csr_write(0x73B, value); break;
+ case 28: rv_csr_write(0x73C, value); break;
+ case 29: rv_csr_write(0x73D, value); break;
+ case 30: rv_csr_write(0x73E, value); break;
+ case 31: rv_csr_write(0x73F, value); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMEVENTH
+ \details Read MHPMEVENTH Register.
+ \param [in] idx Index of MHPMEVENTH Register to read.
+ \return MHPMEVENTH Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMEVENTH(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0x723);
+ case 4: return rv_csr_read(0x724);
+ case 5: return rv_csr_read(0x725);
+ case 6: return rv_csr_read(0x726);
+ case 7: return rv_csr_read(0x727);
+ case 8: return rv_csr_read(0x728);
+ case 9: return rv_csr_read(0x729);
+ case 10: return rv_csr_read(0x72A);
+ case 11: return rv_csr_read(0x72B);
+ case 12: return rv_csr_read(0x72C);
+ case 13: return rv_csr_read(0x72D);
+ case 14: return rv_csr_read(0x72E);
+ case 15: return rv_csr_read(0x72F);
+ case 16: return rv_csr_read(0x730);
+ case 17: return rv_csr_read(0x731);
+ case 18: return rv_csr_read(0x732);
+ case 19: return rv_csr_read(0x733);
+ case 20: return rv_csr_read(0x734);
+ case 21: return rv_csr_read(0x735);
+ case 22: return rv_csr_read(0x736);
+ case 23: return rv_csr_read(0x737);
+ case 24: return rv_csr_read(0x738);
+ case 25: return rv_csr_read(0x739);
+ case 26: return rv_csr_read(0x73A);
+ case 27: return rv_csr_read(0x73B);
+ case 28: return rv_csr_read(0x73C);
+ case 29: return rv_csr_read(0x73D);
+ case 30: return rv_csr_read(0x73E);
+ case 31: return rv_csr_read(0x73F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMCOUNTER
+ \details Write MHPMCOUNTER Register
+ \param [in] idx Index of MHPMCOUNTER Register
+ \param [in] value MHPMCOUNTER Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMCOUNTER(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0xB03, (value)); break;
+ case 4: rv_csr_write(0xB04, (value)); break;
+ case 5: rv_csr_write(0xB05, (value)); break;
+ case 6: rv_csr_write(0xB06, (value)); break;
+ case 7: rv_csr_write(0xB07, (value)); break;
+ case 8: rv_csr_write(0xB08, (value)); break;
+ case 9: rv_csr_write(0xB09, (value)); break;
+ case 10: rv_csr_write(0xB0A, (value)); break;
+ case 11: rv_csr_write(0xB0B, (value)); break;
+ case 12: rv_csr_write(0xB0C, (value)); break;
+ case 13: rv_csr_write(0xB0D, (value)); break;
+ case 14: rv_csr_write(0xB0E, (value)); break;
+ case 15: rv_csr_write(0xB0F, (value)); break;
+ case 16: rv_csr_write(0xB10, (value)); break;
+ case 17: rv_csr_write(0xB11, (value)); break;
+ case 18: rv_csr_write(0xB12, (value)); break;
+ case 19: rv_csr_write(0xB13, (value)); break;
+ case 20: rv_csr_write(0xB14, (value)); break;
+ case 21: rv_csr_write(0xB15, (value)); break;
+ case 22: rv_csr_write(0xB16, (value)); break;
+ case 23: rv_csr_write(0xB17, (value)); break;
+ case 24: rv_csr_write(0xB18, (value)); break;
+ case 25: rv_csr_write(0xB19, (value)); break;
+ case 26: rv_csr_write(0xB1A, (value)); break;
+ case 27: rv_csr_write(0xB1B, (value)); break;
+ case 28: rv_csr_write(0xB1C, (value)); break;
+ case 29: rv_csr_write(0xB1D, (value)); break;
+ case 30: rv_csr_write(0xB1E, (value)); break;
+ case 31: rv_csr_write(0xB1F, (value)); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMCOUNTER
+ \details Write MHPMCOUNTER Register.
+ \param [in] idx Index of MHPMCOUNTER Register
+ \return MHPMCOUNTER Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMCOUNTER(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0xB03);
+ case 4: return rv_csr_read(0xB04);
+ case 5: return rv_csr_read(0xB05);
+ case 6: return rv_csr_read(0xB06);
+ case 7: return rv_csr_read(0xB07);
+ case 8: return rv_csr_read(0xB08);
+ case 9: return rv_csr_read(0xB09);
+ case 10: return rv_csr_read(0xB0A);
+ case 11: return rv_csr_read(0xB0B);
+ case 12: return rv_csr_read(0xB0C);
+ case 13: return rv_csr_read(0xB0D);
+ case 14: return rv_csr_read(0xB0E);
+ case 15: return rv_csr_read(0xB0F);
+ case 16: return rv_csr_read(0xB10);
+ case 17: return rv_csr_read(0xB11);
+ case 18: return rv_csr_read(0xB12);
+ case 19: return rv_csr_read(0xB13);
+ case 20: return rv_csr_read(0xB14);
+ case 21: return rv_csr_read(0xB15);
+ case 22: return rv_csr_read(0xB16);
+ case 23: return rv_csr_read(0xB17);
+ case 24: return rv_csr_read(0xB18);
+ case 25: return rv_csr_read(0xB19);
+ case 26: return rv_csr_read(0xB1A);
+ case 27: return rv_csr_read(0xB1B);
+ case 28: return rv_csr_read(0xB1C);
+ case 29: return rv_csr_read(0xB1D);
+ case 30: return rv_csr_read(0xB1E);
+ case 31: return rv_csr_read(0xB1F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMCOUNTERH
+ \details Write MHPMCOUNTERH Register
+ \param [in] idx Index of MHPMCOUNTERH Register
+ \param [in] value MHPMCOUNTERH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMCOUNTERH(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0xB83, (value)); break;
+ case 4: rv_csr_write(0xB84, (value)); break;
+ case 5: rv_csr_write(0xB85, (value)); break;
+ case 6: rv_csr_write(0xB86, (value)); break;
+ case 7: rv_csr_write(0xB87, (value)); break;
+ case 8: rv_csr_write(0xB88, (value)); break;
+ case 9: rv_csr_write(0xB89, (value)); break;
+ case 10: rv_csr_write(0xB8A, (value)); break;
+ case 11: rv_csr_write(0xB8B, (value)); break;
+ case 12: rv_csr_write(0xB8C, (value)); break;
+ case 13: rv_csr_write(0xB8D, (value)); break;
+ case 14: rv_csr_write(0xB8E, (value)); break;
+ case 15: rv_csr_write(0xB8F, (value)); break;
+ case 16: rv_csr_write(0xB90, (value)); break;
+ case 17: rv_csr_write(0xB91, (value)); break;
+ case 18: rv_csr_write(0xB92, (value)); break;
+ case 19: rv_csr_write(0xB93, (value)); break;
+ case 20: rv_csr_write(0xB94, (value)); break;
+ case 21: rv_csr_write(0xB95, (value)); break;
+ case 22: rv_csr_write(0xB96, (value)); break;
+ case 23: rv_csr_write(0xB97, (value)); break;
+ case 24: rv_csr_write(0xB98, (value)); break;
+ case 25: rv_csr_write(0xB99, (value)); break;
+ case 26: rv_csr_write(0xB9A, (value)); break;
+ case 27: rv_csr_write(0xB9B, (value)); break;
+ case 28: rv_csr_write(0xB9C, (value)); break;
+ case 29: rv_csr_write(0xB9D, (value)); break;
+ case 30: rv_csr_write(0xB9E, (value)); break;
+ case 31: rv_csr_write(0xB9F, (value)); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMCOUNTERH
+ \details Write MHPMCOUNTERH Register.
+ \param [in] idx Index of MHPMCOUNTERH Register
+ \return MHPMCOUNTERH Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMCOUNTERH(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0xB83);
+ case 4: return rv_csr_read(0xB84);
+ case 5: return rv_csr_read(0xB85);
+ case 6: return rv_csr_read(0xB86);
+ case 7: return rv_csr_read(0xB87);
+ case 8: return rv_csr_read(0xB88);
+ case 9: return rv_csr_read(0xB89);
+ case 10: return rv_csr_read(0xB8A);
+ case 11: return rv_csr_read(0xB8B);
+ case 12: return rv_csr_read(0xB8C);
+ case 13: return rv_csr_read(0xB8D);
+ case 14: return rv_csr_read(0xB8E);
+ case 15: return rv_csr_read(0xB8F);
+ case 16: return rv_csr_read(0xB90);
+ case 17: return rv_csr_read(0xB91);
+ case 18: return rv_csr_read(0xB92);
+ case 19: return rv_csr_read(0xB93);
+ case 20: return rv_csr_read(0xB94);
+ case 21: return rv_csr_read(0xB95);
+ case 22: return rv_csr_read(0xB96);
+ case 23: return rv_csr_read(0xB97);
+ case 24: return rv_csr_read(0xB98);
+ case 25: return rv_csr_read(0xB99);
+ case 26: return rv_csr_read(0xB9A);
+ case 27: return rv_csr_read(0xB9B);
+ case 28: return rv_csr_read(0xB9C);
+ case 29: return rv_csr_read(0xB9D);
+ case 30: return rv_csr_read(0xB9E);
+ case 31: return rv_csr_read(0xB9F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Get MVENDORID Register
+ \details Returns the content of the MVENDROID Register.
+ \return MVENDORID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MVENDORID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mvendorid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MARCHID Register
+ \details Returns the content of the MARCHID Register.
+ \return MARCHID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MARCHID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, marchid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MIMPID Register
+ \details Returns the content of the MIMPID Register.
+ \return MIMPID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIMPID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mimpid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MHARTID Register
+ \details Returns the content of the MHARTID Register.
+ \return MHARTID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHARTID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhartid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get PMPCFGx Register
+ \details Returns the content of the PMPCFGx Register.
+ \return PMPCFGx Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG0(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg0" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG1(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg1" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG2(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg2" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG3(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg3" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get PMPxCFG Register by index
+ \details Returns the content of the PMPxCFG Register.
+ \param [in] idx PMP region index
+ \return PMPxCFG Register value
+ */
+__STATIC_INLINE uint8_t __get_PMPxCFG(unsigned long idx)
+{
+ unsigned long pmpcfgx = 0;
+
+ if (idx < 4) {
+ pmpcfgx = __get_PMPCFG0();
+ } else if (idx >=4 && idx < 8) {
+ idx -= 4;
+ pmpcfgx = __get_PMPCFG1();
+ } else if (idx >=8 && idx < 12) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ } else if (idx >=12 && idx < 16) {
+ idx -= 12;
+ pmpcfgx = __get_PMPCFG3();
+ } else {
+ return 0;
+ }
+
+ return (uint8_t)((pmpcfgx & (0xFF << (idx << 3))) >> (idx << 3));
+}
+
+/**
+ \brief Set PMPCFGx
+ \details Writes the given value to the PMPCFGx Register.
+ \param [in] pmpcfg PMPCFGx Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_PMPCFG0(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg0, %0" : : "r"(pmpcfg));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPCFG1(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg1, %0" : : "r"(pmpcfg));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPCFG2(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg2, %0" : : "r"(pmpcfg));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPCFG3(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg3, %0" : : "r"(pmpcfg));
+}
+
+/**
+ \brief Set PMPxCFG by index
+ \details Writes the given value to the PMPxCFG Register.
+ \param [in] idx PMPx region index
+ \param [in] pmpxcfg PMPxCFG Register value to set
+ */
+__STATIC_INLINE void __set_PMPxCFG(unsigned long idx, uint8_t pmpxcfg)
+{
+ unsigned long pmpcfgx = 0;
+
+ if (idx < 4) {
+ pmpcfgx = __get_PMPCFG0();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | (pmpxcfg << (idx << 3));
+ __set_PMPCFG0(pmpcfgx);
+ } else if (idx >=4 && idx < 8) {
+ idx -= 4;
+ pmpcfgx = __get_PMPCFG1();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | (pmpxcfg << (idx << 3));
+ __set_PMPCFG1(pmpcfgx);
+ } else if (idx >=8 && idx < 12) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | (pmpxcfg << (idx << 3));
+ __set_PMPCFG2(pmpcfgx);
+ } else if (idx >=12 && idx < 16) {
+ idx -= 12;
+ pmpcfgx = __get_PMPCFG3();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | (pmpxcfg << (idx << 3));
+ __set_PMPCFG3(pmpcfgx);
+ } else {
+ return;
+ }
+}
+
+/**
+ \brief Get PMPADDRx Register
+ \details Returns the content of the PMPADDRx Register.
+ \return PMPADDRx Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR0(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr0" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR1(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr1" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR2(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr2" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR3(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr3" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR4(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr4" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR5(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr5" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR6(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr6" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR7(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr7" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR8(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr8" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR9(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr9" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR10(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr10" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR11(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr11" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR12(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr12" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR13(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr13" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR14(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr14" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR15(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr15" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get PMPADDRx Register by index
+ \details Returns the content of the PMPADDRx Register.
+ \param [in] idx PMP region index
+ \return PMPADDRx Register value
+ */
+__STATIC_INLINE unsigned long __get_PMPADDRx(unsigned long idx)
+{
+ switch (idx) {
+ case 0: return __get_PMPADDR0();
+ case 1: return __get_PMPADDR1();
+ case 2: return __get_PMPADDR2();
+ case 3: return __get_PMPADDR3();
+ case 4: return __get_PMPADDR4();
+ case 5: return __get_PMPADDR5();
+ case 6: return __get_PMPADDR6();
+ case 7: return __get_PMPADDR7();
+ case 8: return __get_PMPADDR8();
+ case 9: return __get_PMPADDR9();
+ case 10: return __get_PMPADDR10();
+ case 11: return __get_PMPADDR11();
+ case 12: return __get_PMPADDR12();
+ case 13: return __get_PMPADDR13();
+ case 14: return __get_PMPADDR14();
+ case 15: return __get_PMPADDR15();
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set PMPADDRx
+ \details Writes the given value to the PMPADDRx Register.
+ \param [in] pmpaddr PMPADDRx Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_PMPADDR0(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr0, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR1(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr1, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR2(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr2, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR3(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr3, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR4(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr4, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR5(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr5, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR6(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr6, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR7(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr7, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR8(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr8, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR9(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr9, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR10(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr10, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR11(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr11, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR12(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr12, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR13(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr13, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR14(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr14, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR15(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr15, %0" : : "r"(pmpaddr));
+}
+
+/**
+ \brief Set PMPADDRx by index
+ \details Writes the given value to the PMPADDRx Register.
+ \param [in] idx PMP region index
+ \param [in] pmpaddr PMPADDRx Register value to set
+ */
+__STATIC_INLINE void __set_PMPADDRx(unsigned long idx, unsigned long pmpaddr)
+{
+ switch (idx) {
+ case 0: __set_PMPADDR0(pmpaddr); break;
+ case 1: __set_PMPADDR1(pmpaddr); break;
+ case 2: __set_PMPADDR2(pmpaddr); break;
+ case 3: __set_PMPADDR3(pmpaddr); break;
+ case 4: __set_PMPADDR4(pmpaddr); break;
+ case 5: __set_PMPADDR5(pmpaddr); break;
+ case 6: __set_PMPADDR6(pmpaddr); break;
+ case 7: __set_PMPADDR7(pmpaddr); break;
+ case 8: __set_PMPADDR8(pmpaddr); break;
+ case 9: __set_PMPADDR9(pmpaddr); break;
+ case 10: __set_PMPADDR10(pmpaddr); break;
+ case 11: __set_PMPADDR11(pmpaddr); break;
+ case 12: __set_PMPADDR12(pmpaddr); break;
+ case 13: __set_PMPADDR13(pmpaddr); break;
+ case 14: __set_PMPADDR14(pmpaddr); break;
+ case 15: __set_PMPADDR15(pmpaddr); break;
+ default: return;
+ }
+}
+
+/**
+ \brief Enable interrupts and exceptions
+ \details Enables interrupts and exceptions by setting the IE-bit and EE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __enable_excp_irq(void)
+{
+ __enable_irq();
+}
+
+/**
+ \brief Disable interrupts and exceptions
+ \details Disables interrupts and exceptions by clearing the IE-bit and EE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __disable_excp_irq(void)
+{
+ __disable_irq();
+}
+
+#define __CSI_GCC_OUT_REG(r) "=r" (r)
+#define __CSI_GCC_USE_REG(r) "r" (r)
+
+/**
+ \brief No Operation
+ \details No Operation does nothing. This instruction can be used for code alignment purposes.
+ */
+__ALWAYS_STATIC_INLINE void __NOP(void)
+{
+ __ASM volatile("nop");
+}
+
+
+/**
+ \brief Wait For Interrupt
+ \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
+ */
+__ALWAYS_STATIC_INLINE void __WFI(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Wait For Interrupt
+ \details Wait For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __WAIT(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Doze For Interrupt
+ \details Doze For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __DOZE(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Stop For Interrupt
+ \details Stop For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __STOP(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Instruction Synchronization Barrier
+ \details Instruction Synchronization Barrier flushes the pipeline in the processor,
+ so that all instructions following the ISB are fetched from cache or memory,
+ after the instruction has been completed.
+ */
+__ALWAYS_STATIC_INLINE void __ISB(void)
+{
+ __ASM volatile("fence.i");
+ __ASM volatile("fence r, r");
+}
+
+
+/**
+ \brief Data Synchronization Barrier
+ \details Acts as a special kind of Data Memory Barrier.
+ It completes when all explicit memory accesses before this instruction complete.
+ */
+__ALWAYS_STATIC_INLINE void __DSB(void)
+{
+ __ASM volatile("fence iorw, iorw");
+#if __riscv_xtheadsync
+ __ASM volatile("sync");
+#endif
+}
+
+/**
+ \brief Invalid all icache
+ \details invalid all icache.
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.iall");
+#endif
+}
+
+/**
+ \brief Invalid Icache by addr
+ \details Invalid Icache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.ipa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid all dcache
+ \details invalid all dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_IALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.iall");
+#endif
+}
+
+/**
+ \brief Clear all dcache
+ \details clear all dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.call");
+#endif
+}
+
+/**
+ \brief Clear&invalid all dcache
+ \details clear & invalid all dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CIALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.ciall");
+#endif
+}
+
+/**
+ \brief Invalid Dcache by addr
+ \details Invalid Dcache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_IPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.ipa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear Dcache by addr
+ \details Clear Dcache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cpa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear & Invalid Dcache by addr
+ \details Clear & Invalid Dcache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CIPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cipa %0" : : "r"(addr));
+#endif
+}
+
+
+/**
+ \brief Data Memory Barrier
+ \details Ensures the apparent order of the explicit memory operations before
+ and after the instruction, without ensuring their completion.
+ */
+__ALWAYS_STATIC_INLINE void __DMB(void)
+{
+ __ASM volatile("fence");
+}
+
+/**
+ \brief Reverse byte order (32 bit)
+ \details Reverses the byte order in integer value.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __REV(unsigned long value)
+{
+ return __builtin_bswap32(value);
+}
+
+
+/**
+ \brief Reverse byte order (16 bit)
+ \details Reverses the byte order in two unsigned short values.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __REV16(unsigned long value)
+{
+ unsigned long result;
+
+ result = ((value & 0xFF000000) >> 8) | ((value & 0x00FF0000) << 8) |
+ ((value & 0x0000FF00) >> 8) | ((value & 0x000000FF) << 8);
+
+ return (result);
+}
+
+
+/**
+ \brief Reverse byte order in signed short value
+ \details Reverses the byte order in a signed short value with sign extension to integer.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE int32_t __REVSH(int32_t value)
+{
+ return (short)(((value & 0xFF00) >> 8) | ((value & 0x00FF) << 8));
+}
+
+
+/**
+ \brief Rotate Right in unsigned value (32 bit)
+ \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
+ \param [in] op1 Value to rotate
+ \param [in] op2 Number of Bits to rotate
+ \return Rotated value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __ROR(unsigned long op1, unsigned long op2)
+{
+ return (op1 >> op2) | (op1 << (32U - op2));
+}
+
+
+/**
+ \brief Breakpoint
+ \details Causes the processor to enter Debug state
+ Debug tools can use this to investigate system state when the instruction at a particular address is reached.
+ */
+__ALWAYS_STATIC_INLINE void __BKPT(void)
+{
+ __ASM volatile("ebreak");
+}
+
+/**
+ \brief Reverse bit order of value
+ \details Reverses the bit order of the given value.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __RBIT(unsigned long value)
+{
+ unsigned long result;
+
+ int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */
+
+ result = value; /* r will be reversed bits of v; first get LSB of v */
+
+ for (value >>= 1U; value; value >>= 1U) {
+ result <<= 1U;
+ result |= value & 1U;
+ s--;
+ }
+
+ result <<= s; /* shift when v's highest bits are zero */
+
+ return (result);
+}
+
+
+/**
+ \brief Count leading zeros
+ \details Counts the number of leading zeros of a data value.
+ \param [in] value Value to count the leading zeros
+ \return number of leading zeros in value
+ */
+#define __CLZ __builtin_clz
+/**
+ \details This function saturates a signed value.
+ \param [in] x Value to be saturated
+ \param [in] y Bit position to saturate to [1..32]
+ \return Saturated value.
+ */
+__ALWAYS_STATIC_INLINE int32_t __SSAT(int32_t x, unsigned long y)
+{
+ int32_t posMax, negMin;
+ unsigned long i;
+
+ posMax = 1;
+
+ for (i = 0; i < (y - 1); i++) {
+ posMax = posMax * 2;
+ }
+
+ if (x > 0) {
+ posMax = (posMax - 1);
+
+ if (x > posMax) {
+ x = posMax;
+ }
+
+// x &= (posMax * 2 + 1);
+ } else {
+ negMin = -posMax;
+
+ if (x < negMin) {
+ x = negMin;
+ }
+
+// x &= (posMax * 2 - 1);
+ }
+
+ return (x);
+}
+
+/**
+ \brief Unsigned Saturate
+ \details Saturates an unsigned value.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (0..31)
+ \return Saturated value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USAT(unsigned long value, unsigned long sat)
+{
+ unsigned long result;
+
+ if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) {
+ result = 0xFFFFFFFF >> (32 - sat);
+ } else {
+ result = value;
+ }
+
+ return (result);
+}
+
+/**
+ \brief Unsigned Saturate for internal use
+ \details Saturates an unsigned value, should not call directly.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (0..31)
+ \return Saturated value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __IUSAT(unsigned long value, unsigned long sat)
+{
+ unsigned long result;
+
+ if (value & 0x80000000) { /* only overflow set bit-31 */
+ result = 0;
+ } else if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) {
+ result = 0xFFFFFFFF >> (32 - sat);
+ } else {
+ result = value;
+ }
+
+ return (result);
+}
+
+/**
+ \brief Rotate Right with Extend
+ \details This function moves each bit of a bitstring right by one bit.
+ The carry input is shifted in at the left end of the bitstring.
+ \note carry input will always 0.
+ \param [in] op1 Value to rotate
+ \return Rotated value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __RRX(unsigned long op1)
+{
+ return 0;
+}
+
+/**
+ \brief LDRT Unprivileged (8 bit)
+ \details Executes a Unprivileged LDRT instruction for 8 bit value.
+ \param [in] addr Pointer to location
+ \return value of type uint8_t at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr)
+{
+ unsigned long result;
+
+ __ASM volatile("lb %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return ((uint8_t) result); /* Add explicit type cast here */
+}
+
+
+/**
+ \brief LDRT Unprivileged (16 bit)
+ \details Executes a Unprivileged LDRT instruction for 16 bit values.
+ \param [in] addr Pointer to location
+ \return value of type uint16_t at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr)
+{
+ unsigned long result;
+
+ __ASM volatile("lh %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return ((uint16_t) result); /* Add explicit type cast here */
+}
+
+
+/**
+ \brief LDRT Unprivileged (32 bit)
+ \details Executes a Unprivileged LDRT instruction for 32 bit values.
+ \param [in] addr Pointer to location
+ \return value of type unsigned long at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE unsigned long __LDRT(volatile unsigned long *addr)
+{
+ unsigned long result;
+
+ __ASM volatile("lw %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return (result);
+}
+
+
+/**
+ \brief STRT Unprivileged (8 bit)
+ \details Executes a Unprivileged STRT instruction for 8 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr)
+{
+ __ASM volatile("sb %1, 0(%0)" :: "r"(addr), "r"((unsigned long)value) : "memory");
+}
+
+
+/**
+ \brief STRT Unprivileged (16 bit)
+ \details Executes a Unprivileged STRT instruction for 16 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr)
+{
+ __ASM volatile("sh %1, 0(%0)" :: "r"(addr), "r"((unsigned long)value) : "memory");
+}
+
+
+/**
+ \brief STRT Unprivileged (32 bit)
+ \details Executes a Unprivileged STRT instruction for 32 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRT(unsigned long value, volatile unsigned long *addr)
+{
+ __ASM volatile("sw %1, 0(%0)" :: "r"(addr), "r"(value) : "memory");
+}
+
+/*@}*/ /* end of group CSI_Core_InstructionInterface */
+
+/* ################### Compiler specific Intrinsics ########################### */
+/** \defgroup CSI_SIMD_intrinsics CSI SIMD Intrinsics
+ Access to dedicated SIMD instructions \n
+ Single Instruction Multiple Data (SIMD) extensions are provided to simplify development of application software. SIMD extensions increase the processing capability without materially increasing the power consumption. The SIMD extensions are completely transparent to the operating system (OS), allowing existing OS ports to be used.
+
+ @{
+*/
+
+/**
+ \brief Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16]
+ of val2 levitated with the val3.
+ \details Combine a halfword from one register with a halfword from another register.
+ The second argument can be left-shifted before extraction of the halfword.
+ \param [in] val1 first 16-bit operands
+ \param [in] val2 second 16-bit operands
+ \param [in] val3 value for left-shifting val2. Value range [0..31].
+ \return the combination of halfwords.
+ \remark
+ res[15:0] = val1[15:0] \n
+ res[31:16] = val2[31:16] << val3
+ */
+__ALWAYS_STATIC_INLINE unsigned long __PKHBT(unsigned long val1, unsigned long val2, unsigned long val3)
+{
+ return ((((int32_t)(val1) << 0) & (int32_t)0x0000FFFF) | (((int32_t)(val2) << val3) & (int32_t)0xFFFF0000));
+}
+
+/**
+ \brief Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0]
+ of val2 right-shifted with the val3.
+ \details Combine a halfword from one register with a halfword from another register.
+ The second argument can be right-shifted before extraction of the halfword.
+ \param [in] val1 first 16-bit operands
+ \param [in] val2 second 16-bit operands
+ \param [in] val3 value for right-shifting val2. Value range [1..32].
+ \return the combination of halfwords.
+ \remark
+ res[15:0] = val2[15:0] >> val3 \n
+ res[31:16] = val1[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __PKHTB(unsigned long val1, unsigned long val2, unsigned long val3)
+{
+ return ((((int32_t)(val1) << 0) & (int32_t)0xFFFF0000) | (((int32_t)(val2) >> val3) & (int32_t)0x0000FFFF));
+}
+
+/**
+ \brief Dual 16-bit signed saturate.
+ \details This function saturates a signed value.
+ \param [in] x two signed 16-bit values to be saturated.
+ \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16.
+ \return the sum of the absolute differences of the following bytes, added to the accumulation value:\n
+ the signed saturation of the low halfword in val1, saturated to the bit position specified in
+ val2 and returned in the low halfword of the return value.\n
+ the signed saturation of the high halfword in val1, saturated to the bit position specified in
+ val2 and returned in the high halfword of the return value.
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SSAT16(int32_t x, const unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __SSAT((((int32_t)x << 16) >> 16), y) & (int32_t)0x0000FFFF;
+ s = __SSAT((((int32_t)x) >> 16), y) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturate.
+ \details This function enables you to saturate two signed 16-bit values to a selected unsigned range.
+ \param [in] x two signed 16-bit values to be saturated.
+ \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16.
+ \return the saturation of the two signed 16-bit values, as non-negative values:
+ the saturation of the low halfword in val1, saturated to the bit position specified in
+ val2 and returned in the low halfword of the return value.\n
+ the saturation of the high halfword in val1, saturated to the bit position specified in
+ val2 and returned in the high halfword of the return value.
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USAT16(unsigned long x, const unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __IUSAT(((x << 16) >> 16), y) & 0x0000FFFF;
+ s = __IUSAT(((x) >> 16), y) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit saturating addition.
+ \details This function enables you to perform four 8-bit integer additions,
+ saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the saturated addition of the first byte of each operand in the first byte of the return value.\n
+ the saturated addition of the second byte of each operand in the second byte of the return value.\n
+ the saturated addition of the third byte of each operand in the third byte of the return value.\n
+ the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = __SSAT(((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;
+ s = __SSAT(((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;
+ t = __SSAT(((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;
+ u = __SSAT(((((int32_t)x) >> 24) + (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned saturating addition.
+ \details This function enables you to perform four unsigned 8-bit integer additions,
+ saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the saturated addition of the first byte of each operand in the first byte of the return value.\n
+ the saturated addition of the second byte of each operand in the second byte of the return value.\n
+ the saturated addition of the third byte of each operand in the third byte of the return value.\n
+ the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range 0 <= x <= 2^8 - 1.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = __IUSAT((((x << 24) >> 24) + ((y << 24) >> 24)), 8) & 0x000000FF;
+ s = __IUSAT((((x << 16) >> 24) + ((y << 16) >> 24)), 8) & 0x000000FF;
+ t = __IUSAT((((x << 8) >> 24) + ((y << 8) >> 24)), 8) & 0x000000FF;
+ u = __IUSAT((((x) >> 24) + ((y) >> 24)), 8) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition.
+ \details This function performs four 8-bit signed integer additions.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the addition of the first bytes from each operand, in the first byte of the return value.\n
+ the addition of the second bytes of each operand, in the second byte of the return value.\n
+ the addition of the third bytes of each operand, in the third byte of the return value.\n
+ the addition of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF;
+ s = ((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF;
+ t = ((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF;
+ u = ((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned addition.
+ \details This function performs four unsigned 8-bit integer additions.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the addition of the first bytes from each operand, in the first byte of the return value.\n
+ the addition of the second bytes of each operand, in the second byte of the return value.\n
+ the addition of the third bytes of each operand, in the third byte of the return value.\n
+ the addition of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) + ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) + ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) + ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) + ((y) >> 24)) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit saturating subtract.
+ \details This function enables you to perform four 8-bit integer subtractions,
+ saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the subtraction of the first byte of each operand in the first byte of the return value.\n
+ the subtraction of the second byte of each operand in the second byte of the return value.\n
+ the subtraction of the third byte of each operand in the third byte of the return value.\n
+ the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QSUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = __SSAT(((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;
+ s = __SSAT(((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;
+ t = __SSAT(((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;
+ u = __SSAT(((((int32_t)x) >> 24) - (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned saturating subtraction.
+ \details This function enables you to perform four unsigned 8-bit integer subtractions,
+ saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the subtraction of the first byte of each operand in the first byte of the return value.\n
+ the subtraction of the second byte of each operand in the second byte of the return value.\n
+ the subtraction of the third byte of each operand in the third byte of the return value.\n
+ the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit unsigned integer range 0 <= x <= 2^8 - 1.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQSUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = __IUSAT((((x << 24) >> 24) - ((y << 24) >> 24)), 8) & 0x000000FF;
+ s = __IUSAT((((x << 16) >> 24) - ((y << 16) >> 24)), 8) & 0x000000FF;
+ t = __IUSAT((((x << 8) >> 24) - ((y << 8) >> 24)), 8) & 0x000000FF;
+ u = __IUSAT((((x) >> 24) - ((y) >> 24)), 8) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed subtraction.
+ \details This function enables you to perform four 8-bit signed integer subtractions.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SSUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF;
+ s = ((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF;
+ t = ((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF;
+ u = ((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned subtract.
+ \details This function enables you to perform four 8-bit unsigned integer subtractions.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Unsigned sum of quad 8-bit unsigned absolute difference.
+ \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values
+ of the differences together, returning the result as a single unsigned integer.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.\n
+ The sum is returned as a single unsigned integer.
+ \remark
+ absdiff1 = val1[7:0] - val2[7:0] \n
+ absdiff2 = val1[15:8] - val2[15:8] \n
+ absdiff3 = val1[23:16] - val2[23:16] \n
+ absdiff4 = val1[31:24] - val2[31:24] \n
+ res[31:0] = absdiff1 + absdiff2 + absdiff3 + absdiff4
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USAD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF;
+
+ return (u + t + s + r);
+}
+
+#if 0
+/**
+ \brief Unsigned sum of quad 8-bit unsigned absolute difference with 32-bit accumulate.
+ \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values
+ of the differences to a 32-bit accumulate operand.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \param [in] sum accumulation value.
+ \return the sum of the absolute differences of the following bytes, added to the accumulation value:
+ the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ absdiff1 = val1[7:0] - val2[7:0] \n
+ absdiff2 = val1[15:8] - val2[15:8] \n
+ absdiff3 = val1[23:16] - val2[23:16] \n
+ absdiff4 = val1[31:24] - val2[31:24] \n
+ sum = absdiff1 + absdiff2 + absdiff3 + absdiff4 \n
+ res[31:0] = sum[31:0] + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USADA8(unsigned long x, unsigned long y, unsigned long sum)
+{
+ int32_t r, s, t, u;
+
+#ifdef __cplusplus
+ r = (abs((long long)((x << 24) >> 24) - ((y << 24) >> 24))) & 0x000000FF;
+ s = (abs((long long)((x << 16) >> 24) - ((y << 16) >> 24))) & 0x000000FF;
+ t = (abs((long long)((x << 8) >> 24) - ((y << 8) >> 24))) & 0x000000FF;
+ u = (abs((long long)((x) >> 24) - ((y) >> 24))) & 0x000000FF;
+#else
+ r = (abs(((x << 24) >> 24) - ((y << 24) >> 24))) & 0x000000FF;
+ s = (abs(((x << 16) >> 24) - ((y << 16) >> 24))) & 0x000000FF;
+ t = (abs(((x << 8) >> 24) - ((y << 8) >> 24))) & 0x000000FF;
+ u = (abs(((x) >> 24) - ((y) >> 24))) & 0x000000FF;
+#endif
+ return (u + t + s + r + sum);
+}
+#endif
+
+/**
+ \brief Dual 16-bit saturating addition.
+ \details This function enables you to perform two 16-bit integer arithmetic additions in parallel,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated addition of the low halfwords, in the low halfword of the return value.\n
+ the saturated addition of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QADD16(unsigned long x, unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating addition.
+ \details This function enables you to perform two unsigned 16-bit integer additions, saturating
+ the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated addition of the low halfwords, in the low halfword of the return value.\n
+ the saturated addition of the high halfwords, in the high halfword of the return value.\n
+ The results are saturated to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQADD16(unsigned long x, unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __IUSAT((((x << 16) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed addition.
+ \details This function enables you to perform two 16-bit signed integer additions.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the addition of the low halfwords in the low halfword of the return value.\n
+ the addition of the high halfwords in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SADD16(unsigned long x, unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = ((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition
+ \details This function enables you to perform two 16-bit unsigned integer additions.
+ \param [in] x first two 16-bit summands for each addition.
+ \param [in] y second two 16-bit summands for each addition.
+ \return the addition of the low halfwords in the low halfword of the return value.\n
+ the addition of the high halfwords in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UADD16(unsigned long x, unsigned long y)
+{
+ int32_t r = 0, s = 0;
+
+ r = (((x << 16) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) + ((y) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+
+/**
+ \brief Dual 16-bit signed addition with halved results.
+ \details This function enables you to perform two signed 16-bit integer additions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved addition of the low halfwords, in the low halfword of the return value.\n
+ the halved addition of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHADD16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition with halved results.
+ \details This function enables you to perform two unsigned 16-bit integer additions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved addition of the low halfwords, in the low halfword of the return value.\n
+ the halved addition of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHADD16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition with halved results.
+ \details This function enables you to perform four signed 8-bit integer additions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n
+ the halved addition of the second bytes from each operand, in the second byte of the return value.\n
+ the halved addition of the third bytes from each operand, in the third byte of the return value.\n
+ the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = (((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF;
+ s = (((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF;
+ t = (((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF;
+ u = (((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned addition with halved results.
+ \details This function enables you to perform four unsigned 8-bit integer additions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n
+ the halved addition of the second bytes from each operand, in the second byte of the return value.\n
+ the halved addition of the third bytes from each operand, in the third byte of the return value.\n
+ the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHADD8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((x << 24) >> 24) + ((y << 24) >> 24)) >> 1) & 0x000000FF;
+ s = ((((x << 16) >> 24) + ((y << 16) >> 24)) >> 1) & 0x000000FF;
+ t = ((((x << 8) >> 24) + ((y << 8) >> 24)) >> 1) & 0x000000FF;
+ u = ((((x) >> 24) + ((y) >> 24)) >> 1) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Dual 16-bit saturating subtract.
+ \details This function enables you to perform two 16-bit integer subtractions in parallel,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n
+ the saturated subtraction of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QSUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating subtraction.
+ \details This function enables you to perform two unsigned 16-bit integer subtractions,
+ saturating the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \param [in] x first two 16-bit operands for each subtraction.
+ \param [in] y second two 16-bit operands for each subtraction.
+ \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n
+ the saturated subtraction of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQSUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction.
+ \details This function enables you to perform two 16-bit signed integer subtractions.
+ \param [in] x first two 16-bit operands of each subtraction.
+ \param [in] y second two 16-bit operands of each subtraction.
+ \return the subtraction of the low halfword in the second operand from the low
+ halfword in the first operand, in the low halfword of the return value. \n
+ the subtraction of the high halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SSUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtract.
+ \details This function enables you to perform two 16-bit unsigned integer subtractions.
+ \param [in] x first two 16-bit operands of each subtraction.
+ \param [in] y second two 16-bit operands of each subtraction.
+ \return the subtraction of the low halfword in the second operand from the low
+ halfword in the first operand, in the low halfword of the return value. \n
+ the subtraction of the high halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) - ((y) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction with halved results.
+ \details This function enables you to perform two signed 16-bit integer subtractions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n
+ the halved subtraction of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHSUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtraction with halved results.
+ \details This function enables you to perform two unsigned 16-bit integer subtractions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n
+ the halved subtraction of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHSUB16(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition with halved results.
+ \details This function enables you to perform four signed 8-bit integer subtractions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n
+ the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n
+ the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] - val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHSUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = (((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF;
+ s = (((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF;
+ t = (((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF;
+ u = (((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF;
+
+ return ((unsigned long)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned subtraction with halved results.
+ \details This function enables you to perform four unsigned 8-bit integer subtractions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n
+ the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n
+ the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] - val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHSUB8(unsigned long x, unsigned long y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((x << 24) >> 24) - ((y << 24) >> 24)) >> 1) & 0x000000FF;
+ s = ((((x << 16) >> 24) - ((y << 16) >> 24)) >> 1) & 0x000000FF;
+ t = ((((x << 8) >> 24) - ((y << 8) >> 24)) >> 1) & 0x000000FF;
+ u = ((((x) >> 24) - ((y) >> 24)) >> 1) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Dual 16-bit add and subtract with exchange.
+ \details This function enables you to exchange the halfwords of the one operand,
+ then add the high halfwords and subtract the low halfwords,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the saturated subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the saturated addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating addition and subtraction with exchange.
+ \details This function enables you to exchange the halfwords of the second operand and
+ perform one unsigned 16-bit integer addition and one unsigned 16-bit subtraction,
+ saturating the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the saturated subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the saturated addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit addition and subtraction with exchange.
+ \details It enables you to exchange the halfwords of the second operand, add the high halfwords
+ and subtract the low halfwords.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition and subtraction with exchange.
+ \details This function enables you to exchange the two halfwords of the second operand,
+ add the high halfwords and subtract the low halfwords.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) - ((y) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed addition and subtraction with halved results.
+ \details This function enables you to exchange the two halfwords of one operand, perform one
+ signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results.
+ \param [in] x first 16-bit operands.
+ \param [in] y second 16-bit operands.
+ \return the halved subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the halved addition of the low halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition and subtraction with halved results and exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ add the high halfwords and subtract the low halfwords, halving the results.
+ \param [in] x first operand for the subtraction in the low halfword, and
+ the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword, and
+ the second operand for the addition in the low halfword.
+ \return the halved subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the halved addition of the low halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHASX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit subtract and add with exchange.
+ \details This function enables you to exchange the halfwords of one operand,
+ then subtract the high halfwords and add the low halfwords,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the saturated addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the saturated subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __QSAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating subtraction and addition with exchange.
+ \details This function enables you to exchange the halfwords of the second operand and perform
+ one unsigned 16-bit integer subtraction and one unsigned 16-bit addition, saturating
+ the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the saturated addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the saturated subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UQSAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtract and add with exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ subtract the high halfwords and add the low halfwords.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __USAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) + ((y) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction and addition with exchange.
+ \details This function enables you to exchange the two halfwords of one operand and perform one
+ 16-bit integer subtraction and one 16-bit addition.
+ \param [in] x first operand for the addition in the low halfword, and the first operand
+ for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword, and the second
+ operand for the subtraction in the low halfword.
+ \return the addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SSAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+
+/**
+ \brief Dual 16-bit signed subtraction and addition with halved results.
+ \details This function enables you to exchange the two halfwords of one operand, perform one signed
+ 16-bit integer subtraction and one signed 16-bit addition, and halve the results.
+ \param [in] x first 16-bit operands.
+ \param [in] y second 16-bit operands.
+ \return the halved addition of the low halfword in the first operand and the
+ high halfword in the second operand, in the low halfword of the return value.\n
+ the halved subtraction of the low halfword in the second operand from the
+ high halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SHSAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((unsigned long)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtraction and addition with halved results and exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ subtract the high halfwords and add the low halfwords, halving the results.
+ \param [in] x first operand for the addition in the low halfword, and
+ the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword, and
+ the second operand for the subtraction in the low halfword.
+ \return the halved addition of the low halfword in the first operand and the
+ high halfword in the second operand, in the low halfword of the return value.\n
+ the halved subtraction of the low halfword in the second operand from the
+ high halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UHSAX(unsigned long x, unsigned long y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange returning difference.
+ \details This function enables you to perform two 16-bit signed multiplications, subtracting
+ one of the products from the other. The halfwords of the second operand are exchanged
+ before performing the arithmetic. This produces top * bottom and bottom * top multiplication.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the difference of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 - p2
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMUSDX(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16))));
+}
+
+/**
+ \brief Sum of dual 16-bit signed multiply with exchange.
+ \details This function enables you to perform two 16-bit signed multiplications with exchanged
+ halfwords of the second operand, adding the products together.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the sum of the products of the two 16-bit signed multiplications with exchanged halfwords of the second operand.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 + p2
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMUADX(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16))));
+}
+
+
+/**
+ \brief Saturating add.
+ \details This function enables you to obtain the saturating add of two integers.
+ \param [in] x first summand of the saturating add operation.
+ \param [in] y second summand of the saturating add operation.
+ \return the saturating addition of val1 and val2.
+ \remark
+ res[31:0] = SAT(val1 + SAT(val2))
+ */
+__ALWAYS_STATIC_INLINE int32_t __QADD(int32_t x, int32_t y)
+{
+ int32_t result;
+
+ if (y >= 0) {
+ if ((int32_t)((unsigned long)x + (unsigned long)y) >= x) {
+ result = x + y;
+ } else {
+ result = 0x7FFFFFFF;
+ }
+ } else {
+ if ((int32_t)((unsigned long)x + (unsigned long)y) < x) {
+ result = x + y;
+ } else {
+ result = 0x80000000;
+ }
+ }
+
+ return result;
+}
+
+/**
+ \brief Saturating subtract.
+ \details This function enables you to obtain the saturating add of two integers.
+ \param [in] x first summand of the saturating add operation.
+ \param [in] y second summand of the saturating add operation.
+ \return the saturating addition of val1 and val2.
+ \remark
+ res[31:0] = SAT(val1 - SAT(val2))
+ */
+__ALWAYS_STATIC_INLINE int32_t __QSUB(int32_t x, int32_t y)
+{
+ int64_t tmp;
+ int32_t result;
+
+ tmp = (int64_t)x - (int64_t)y;
+
+ if (tmp > 0x7fffffff) {
+ tmp = 0x7fffffff;
+ } else if (tmp < (-2147483647 - 1)) {
+ tmp = -2147483647 - 1;
+ }
+
+ result = tmp;
+ return result;
+}
+
+/**
+ \brief Dual 16-bit signed multiply with single 32-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications,
+ adding both results to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value, as a 32-bit integer.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 + p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLAD(unsigned long x, unsigned long y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications with exchanged
+ halfwords of the second operand, adding both results to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication with exchanged halfwords of the second
+ operand added to the accumulate value, as a 32-bit integer.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 + p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLADX(unsigned long x, unsigned long y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.
+ \details This function enables you to perform two 16-bit signed multiplications, take the
+ difference of the products, subtracting the high halfword product from the low
+ halfword product, and add the difference to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 - p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLSD(unsigned long x, unsigned long y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.
+ \details This function enables you to exchange the halfwords in the second operand, then perform two 16-bit
+ signed multiplications. The difference of the products is added to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 - p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLSDX(unsigned long x, unsigned long y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with single 64-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications, adding both results
+ to a 64-bit accumulate operand. Overflow is only possible as a result of the 64-bit addition.
+ This overflow is not detected if it occurs. Instead, the result wraps around modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ sum = p1 + p2 + val3[63:32][31:0] \n
+ res[63:32] = sum[63:32] \n
+ res[31:0] = sum[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint64_t __SMLALD(unsigned long x, unsigned long y, uint64_t sum)
+{
+ return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((uint64_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange with single 64-bit accumulator.
+ \details This function enables you to exchange the halfwords of the second operand, and perform two
+ signed 16-bit multiplications, adding both results to a 64-bit accumulate operand. Overflow
+ is only possible as a result of the 64-bit addition. This overflow is not detected if it occurs.
+ Instead, the result wraps around modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ sum = p1 + p2 + val3[63:32][31:0] \n
+ res[63:32] = sum[63:32] \n
+ res[31:0] = sum[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint64_t __SMLALDX(unsigned long x, unsigned long y, uint64_t sum)
+{
+ return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((uint64_t)sum))));
+}
+
+/**
+ \brief dual 16-bit signed multiply subtract with 64-bit accumulate.
+ \details This function It enables you to perform two 16-bit signed multiplications, take the difference
+ of the products, subtracting the high halfword product from the low halfword product, and add the
+ difference to a 64-bit accumulate operand. Overflow cannot occur during the multiplications or the
+ subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow is not
+ detected. Instead, the result wraps round to modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[63:32][31:0] = p1 - p2 + val3[63:32][31:0]
+ */
+__ALWAYS_STATIC_INLINE uint64_t __SMLSLD(unsigned long x, unsigned long y, uint64_t sum)
+{
+ return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((uint64_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 64-bit accumulate.
+ \details This function enables you to exchange the halfwords of the second operand, perform two 16-bit multiplications,
+ adding the difference of the products to a 64-bit accumulate operand. Overflow cannot occur during the
+ multiplications or the subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow
+ is not detected. Instead, the result wraps round to modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[63:32][31:0] = p1 - p2 + val3[63:32][31:0]
+ */
+__ALWAYS_STATIC_INLINE uint64_t __SMLSLDX(unsigned long x, unsigned long y, uint64_t sum)
+{
+ return ((uint64_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((uint64_t)sum))));
+}
+
+/**
+ \brief 32-bit signed multiply with 32-bit truncated accumulator.
+ \details This function enables you to perform a signed 32-bit multiplications, adding the most
+ significant 32 bits of the 64-bit result to a 32-bit accumulate operand.
+ \param [in] x first operand for multiplication.
+ \param [in] y second operand for multiplication.
+ \param [in] sum accumulate value.
+ \return the product of multiplication (most significant 32 bits) is added to the accumulate value, as a 32-bit integer.
+ \remark
+ p = val1 * val2 \n
+ res[31:0] = p[63:32] + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMMLA(int32_t x, int32_t y, int32_t sum)
+{
+ return (unsigned long)((int32_t)((int64_t)((int64_t)x * (int64_t)y) >> 32) + sum);
+}
+
+/**
+ \brief Sum of dual 16-bit signed multiply.
+ \details This function enables you to perform two 16-bit signed multiplications, adding the products together.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the sum of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 + p2
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMUAD(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply returning difference.
+ \details This function enables you to perform two 16-bit signed multiplications, taking the difference
+ of the products by subtracting the high halfword product from the low halfword product.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the difference of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 - p2
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMUSD(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16))));
+}
+
+/**
+ \brief Dual extracted 8-bit to 16-bit signed addition.
+ \details This function enables you to extract two 8-bit values from the second operand (at bit positions
+ [7:0] and [23:16]), sign-extend them to 16-bits each, and add the results to the first operand.
+ \param [in] x values added to the sign-extended to 16-bit values.
+ \param [in] y two 8-bit values to be extracted and sign-extended.
+ \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and
+ val2[23:16] have been extracted and sign-extended prior to the addition.
+ \remark
+ res[15:0] = val1[15:0] + SignExtended(val2[7:0]) \n
+ res[31:16] = val1[31:16] + SignExtended(val2[23:16])
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SXTAB16(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)((((((int32_t)y << 24) >> 24) + (((int32_t)x << 16) >> 16)) & (int32_t)0x0000FFFF) |
+ (((((int32_t)y << 8) >> 8) + (((int32_t)x >> 16) << 16)) & (int32_t)0xFFFF0000)));
+}
+
+/**
+ \brief Extracted 16-bit to 32-bit unsigned addition.
+ \details This function enables you to extract two 8-bit values from one operand, zero-extend
+ them to 16 bits each, and add the results to two 16-bit values from another operand.
+ \param [in] x values added to the zero-extended to 16-bit values.
+ \param [in] y two 8-bit values to be extracted and zero-extended.
+ \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and
+ val2[23:16] have been extracted and zero-extended prior to the addition.
+ \remark
+ res[15:0] = ZeroExt(val2[7:0] to 16 bits) + val1[15:0] \n
+ res[31:16] = ZeroExt(val2[31:16] to 16 bits) + val1[31:16]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UXTAB16(unsigned long x, unsigned long y)
+{
+ return ((unsigned long)(((((y << 24) >> 24) + ((x << 16) >> 16)) & 0x0000FFFF) |
+ ((((y << 8) >> 8) + ((x >> 16) << 16)) & 0xFFFF0000)));
+}
+
+/**
+ \brief Dual extract 8-bits and sign extend each to 16-bits.
+ \details This function enables you to extract two 8-bit values from an operand and sign-extend them to 16 bits each.
+ \param [in] x two 8-bit values in val[7:0] and val[23:16] to be sign-extended.
+ \return the 8-bit values sign-extended to 16-bit values.\n
+ sign-extended value of val[7:0] in the low halfword of the return value.\n
+ sign-extended value of val[23:16] in the high halfword of the return value.
+ \remark
+ res[15:0] = SignExtended(val[7:0]) \n
+ res[31:16] = SignExtended(val[23:16])
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SXTB16(unsigned long x)
+{
+ return ((unsigned long)(((((int32_t)x << 24) >> 24) & (int32_t)0x0000FFFF) |
+ ((((int32_t)x << 8) >> 8) & (int32_t)0xFFFF0000)));
+}
+
+/**
+ \brief Dual extract 8-bits and zero-extend to 16-bits.
+ \details This function enables you to extract two 8-bit values from an operand and zero-extend them to 16 bits each.
+ \param [in] x two 8-bit values in val[7:0] and val[23:16] to be zero-extended.
+ \return the 8-bit values sign-extended to 16-bit values.\n
+ sign-extended value of val[7:0] in the low halfword of the return value.\n
+ sign-extended value of val[23:16] in the high halfword of the return value.
+ \remark
+ res[15:0] = SignExtended(val[7:0]) \n
+ res[31:16] = SignExtended(val[23:16])
+ */
+__ALWAYS_STATIC_INLINE unsigned long __UXTB16(unsigned long x)
+{
+ return ((unsigned long)((((x << 24) >> 24) & 0x0000FFFF) |
+ (((x << 8) >> 8) & 0xFFFF0000)));
+}
+
+#endif /* _CSI_RV32_GCC_H_ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv64_gcc.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv64_gcc.h
new file mode 100644
index 000000000..cbfcf95ac
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv64_gcc.h
@@ -0,0 +1,4383 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file csi_rv64_gcc.h
+ * @brief CSI Header File for GCC.
+ * @version V1.0
+ * @date 01. Sep 2018
+ ******************************************************************************/
+
+#ifndef _CSI_RV64_GCC_H_
+#define _CSI_RV64_GCC_H_
+
+#include
+
+#if CONFIG_CPU_XUANTIE_C907 || CONFIG_CPU_XUANTIE_C907FD || CONFIG_CPU_XUANTIE_C907FDV || CONFIG_CPU_XUANTIE_C907FDVM \
+ || CONFIG_CPU_XUANTIE_C907_RV32 || CONFIG_CPU_XUANTIE_C907FD_RV32 || CONFIG_CPU_XUANTIE_C907FDV_RV32 || CONFIG_CPU_XUANTIE_C907FDVM_RV32 \
+ || CONFIG_CPU_XUANTIE_C908 || CONFIG_CPU_XUANTIE_C908V || CONFIG_CPU_XUANTIE_C908I \
+ || CONFIG_CPU_XUANTIE_C908X || CONFIG_CPU_XUANTIE_C908X_CP || CONFIG_CPU_XUANTIE_C908X_CP_XT \
+ || CONFIG_CPU_XUANTIE_C910V2 || CONFIG_CPU_XUANTIE_C920V2 \
+ || CONFIG_CPU_XUANTIE_C910V3 || CONFIG_CPU_XUANTIE_C920V3 \
+ || CONFIG_CPU_XUANTIE_C910V3_CP || CONFIG_CPU_XUANTIE_C920V3_CP \
+ || CONFIG_CPU_XUANTIE_C910V3_CP_XT || CONFIG_CPU_XUANTIE_C920V3_CP_XT \
+ || CONFIG_CPU_XUANTIE_R908 || CONFIG_CPU_XUANTIE_R908FD || CONFIG_CPU_XUANTIE_R908FDV \
+ || CONFIG_CPU_XUANTIE_R908_CP || CONFIG_CPU_XUANTIE_R908FD_CP || CONFIG_CPU_XUANTIE_R908FDV_CP \
+ || CONFIG_CPU_XUANTIE_R908_CP_XT || CONFIG_CPU_XUANTIE_R908FD_CP_XT || CONFIG_CPU_XUANTIE_R908FDV_CP_XT
+#define CBO_INSN_SUPPORT 1
+#endif
+
+#if CONFIG_INTC_CLIC_PLIC
+#ifndef CONFIG_PLIC_IRQ_OFFSET
+#define PLIC_IRQ_OFFSET 255U
+#else
+#define PLIC_IRQ_OFFSET CONFIG_PLIC_IRQ_OFFSET
+#endif
+#endif /* CONFIG_INTC_CLIC_PLIC */
+
+/* ########################### Core Function Access ########################### */
+/** \ingroup CSI_Core_FunctionInterface
+ \defgroup CSI_Core_RegAccFunctions CSI Core Register Access Functions
+ @{
+ */
+/**
+ \brief Enable IRQ Interrupts
+ \details Enables IRQ interrupts by setting the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __enable_irq(void)
+{
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ __ASM volatile("csrs sstatus, 2");
+ __ASM volatile("li a0, 0x222");
+ __ASM volatile("csrs sie, a0");
+#else
+ __ASM volatile("csrs mstatus, 8");
+ __ASM volatile("li a0, 0x888");
+ __ASM volatile("csrs mie, a0");
+#endif
+}
+
+/**
+ \brief Enable supervisor IRQ Interrupts
+ \details Enables IRQ interrupts by setting the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __enable_supervisor_irq(void)
+{
+ __ASM volatile("csrs sstatus, 2");
+ __ASM volatile("li a0, 0x222");
+ __ASM volatile("csrs sie, a0");
+}
+
+/**
+ \brief Disable IRQ Interrupts
+ \details Disables IRQ interrupts by clearing the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __disable_irq(void)
+{
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ __ASM volatile("csrc sstatus, 2");
+#else
+ __ASM volatile("csrc mstatus, 8");
+#endif
+}
+
+/**
+ \brief Disable supervisor IRQ Interrupts
+ \details Disables supervisor IRQ interrupts by clearing the IE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __disable_supervisor_irq(void)
+{
+ __ASM volatile("csrc sstatus, 2");
+}
+
+/**
+ \brief Enable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void __enable_coret_irq(void)
+{
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ __ASM volatile("li a0, 0x20");
+ __ASM volatile("csrs sie, a0");
+#else
+ __ASM volatile("li a0, 0x80");
+ __ASM volatile("csrs mie, a0");
+#endif
+}
+
+/**
+ \brief Disable CoreTimer(within clint) Interrupts
+ */
+__ALWAYS_STATIC_INLINE void __disable_coret_irq(void)
+{
+#if defined(CONFIG_RISCV_SMODE) && CONFIG_RISCV_SMODE
+ __ASM volatile("li a0, 0x20");
+ __ASM volatile("csrc sie, a0");
+#else
+ __ASM volatile("li a0, 0x80");
+ __ASM volatile("csrc mie, a0");
+#endif
+}
+
+/**
+ \brief Get MXSTATUS
+ \details Returns the content of the MXSTATUS Register.
+ \return MXSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MXSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mxstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MXSTATUS
+ \details Writes the given value to the MXSTATUS Register.
+ \param [in] mxstatus MXSTATUS Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MXSTATUS(unsigned long mxstatus)
+{
+ __ASM volatile("csrw mxstatus, %0" : : "r"(mxstatus));
+}
+
+/**
+ \brief Get SXSTATUS
+ \details Returns the content of the SXSTATUS Register.
+ \return SXSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SXSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, sxstatus" : "=r"(result));
+ return (result);
+}
+
+#if __riscv_xlen == 32
+/**
+ \brief Get MENVCFGH
+ \details Returns the content of the MENVCFGH Register.
+ \return MENVCFGH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MENVCFGH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, menvcfgh" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MENVCFGH
+ \details Writes the given value to the MENVCFGH Register.
+ \param [in] menvcfgh MENVCFGH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MENVCFGH(unsigned long menvcfgh)
+{
+ __ASM volatile("csrw menvcfgh, %0" : : "r"(menvcfgh));
+}
+#endif
+
+/**
+ \brief Get MENVCFG
+ \details Returns the content of the MENVCFG Register.
+ \return MENVCFG Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MENVCFG(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, menvcfg" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MENVCFG
+ \details Writes the given value to the MENVCFG Register.
+ \param [in] menvcfg MENVCFG Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MENVCFG(unsigned long menvcfg)
+{
+ __ASM volatile("csrw menvcfg, %0" : : "r"(menvcfg));
+}
+
+/**
+ \brief Get CPU WORK MODE
+ \details Returns CPU WORK MODE.
+ \return CPU WORK MODE
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_CPU_WORK_MODE(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, sxstatus" : "=r"(result));
+ return ((result >> 30U) & 0x3U);
+}
+
+/**
+ \brief Set MEPC
+ \details Writes the given value to the MEPC Register.
+ \param [in] mepc MEPC Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MEPC(unsigned long mepc)
+{
+ __ASM volatile("csrw mepc, %0" : : "r"(mepc));
+}
+
+/**
+ \brief Get MEPC
+ \details Returns the content of the MEPC Register.
+ \return MEPC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEPC(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mepc" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SEPC
+ \details Writes the given value to the SEPC Register.
+ \param [in] sepc SEPC Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SEPC(unsigned long sepc)
+{
+ __ASM volatile("csrw sepc, %0" : : "r"(sepc));
+}
+
+/**
+ \brief Get SEPC
+ \details Returns the content of the SEPC Register.
+ \return SEPC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SEPC(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, sepc" : "=r"(result));
+ return (result);
+}
+
+
+/**
+ \brief Get MSTATUS
+ \details Returns the content of the MSTATUS Register.
+ \return MSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSTATUS
+ \details Writes the given value to the MSTATUS Register.
+ \param [in] mstatus MSTATUS Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSTATUS(unsigned long mstatus)
+{
+ __ASM volatile("csrw mstatus, %0" : : "r"(mstatus));
+}
+
+/**
+ \brief Get MCOR
+ \details Returns the content of the MCOR Register.
+ \return MCOR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCOR(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcor" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCOR
+ \details Writes the given value to the MCOR Register.
+ \param [in] mstatus MCOR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCOR(unsigned long mcor)
+{
+ __ASM volatile("csrw mcor, %0" : : "r"(mcor));
+}
+
+/**
+ \brief Get MHCR
+ \details Returns the content of the MHCR Register.
+ \return MHCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHCR(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MHCR
+ \details Writes the given value to the MHCR Register.
+ \param [in] mstatus MHCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHCR(unsigned long mhcr)
+{
+ __ASM volatile("csrw mhcr, %0" : : "r"(mhcr));
+}
+
+/**
+ \brief Get MHINT
+ \details Returns the content of the MHINT Register.
+ \return MHINT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHINT(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhint" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MHINT
+ \details Writes the given value to the MHINT Register.
+ \param [in] mstatus MHINT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHINT(unsigned long mhint)
+{
+ __ASM volatile("csrw mhint, %0" : : "r"(mhint));
+}
+
+/**
+ \brief Get MCCR2
+ \details Returns the content of the MCCR2 Register.
+ \return MCCR2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCCR2(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mccr2" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCCR2
+ \details Writes the given value to the MCCR2 Register.
+ \param [in] mstatus MCCR2 Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCCR2(unsigned long mccr2)
+{
+ __ASM volatile("csrw mccr2, %0" : : "r"(mccr2));
+}
+
+/**
+ \brief Get MISA Register
+ \details Returns the content of the MISA Register.
+ \return MISA Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MISA(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, misa" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MISA
+ \details Writes the given value to the MISA Register.
+ \param [in] misa MISA Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MISA(unsigned long misa)
+{
+ __ASM volatile("csrw misa, %0" : : "r"(misa));
+}
+
+/**
+ \brief Get MIE Register
+ \details Returns the content of the MIE Register.
+ \return MIE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mie" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MIE
+ \details Writes the given value to the MIE Register.
+ \param [in] mie MIE Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MIE(unsigned long mie)
+{
+ __ASM volatile("csrw mie, %0" : : "r"(mie));
+}
+
+/**
+ \brief Get MTVEC Register
+ \details Returns the content of the MTVEC Register.
+ \return MTVEC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVEC(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtvec" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MTVEC
+ \details Writes the given value to the MTVEC Register.
+ \param [in] mtvec MTVEC Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MTVEC(unsigned long mtvec)
+{
+ __ASM volatile("csrw mtvec, %0" : : "r"(mtvec));
+}
+
+/**
+ \brief Set MTVT
+ \details Writes the given value to the MTVT Register.
+ \param [in] mtvt MTVT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MTVT(unsigned long mtvt)
+{
+ __ASM volatile("csrw mtvt, %0" : : "r"(mtvt));
+}
+
+/**
+ \brief Get MTVT Register
+ \details Returns the content of the MTVT Register.
+ \return MTVT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVT(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtvt" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTIME
+ \details Returns the content of the MTIME Register.
+ \return MTIME Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTIME(void)
+{
+ unsigned long result;
+
+ __ASM volatile("rdtime %0" : "=r"(result));
+ //__ASM volatile("csrr %0, 0xc01" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTIMEH
+ \details Returns the content of the MTIME Register.
+ \return MTIME Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTIMEH(void)
+{
+ unsigned long result;
+ __ASM volatile("rdtimeh %0" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get SP
+ \details Returns the content of the SP Register.
+ \return SP Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SP(void)
+{
+ unsigned long result;
+
+ __ASM volatile("mv %0, sp" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SP
+ \details Writes the given value to the SP Register.
+ \param [in] sp SP Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SP(unsigned long sp)
+{
+ __ASM volatile("mv sp, %0" : : "r"(sp): "sp");
+}
+
+/**
+ \brief Get MSCRATCH Register
+ \details Returns the content of the MSCRATCH Register.
+ \return MSCRATCH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSCRATCH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mscratch" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSCRATCH
+ \details Writes the given value to the MSCRATCH Register.
+ \param [in] mscratch MSCRATCH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSCRATCH(unsigned long mscratch)
+{
+ __ASM volatile("csrw mscratch, %0" : : "r"(mscratch));
+}
+
+/**
+ \brief Get MCAUSE Register
+ \details Returns the content of the MCAUSE Register.
+ \return MCAUSE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCAUSE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcause" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get SCAUSE Register
+ \details Returns the content of the SCAUSE Register.
+ \return SCAUSE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SCAUSE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, scause" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MNXTI Register
+ \details Returns the content of the MNXTI Register.
+ \return MNXTI Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MNXTI(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mnxti" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MNXTI
+ \details Writes the given value to the MNXTI Register.
+ \param [in] mnxti MNXTI Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MNXTI(unsigned long mnxti)
+{
+ __ASM volatile("csrw mnxti, %0" : : "r"(mnxti));
+}
+
+/**
+ \brief Get MINTSTATUS Register
+ \details Returns the content of the MINTSTATUS Register.
+ \return MINTSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINTSTATUS(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mintstatus" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MTVAL Register
+ \details Returns the content of the MTVAL Register.
+ \return MTVAL Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MTVAL(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mtval" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MIP Register
+ \details Returns the content of the MIP Register.
+ \return MIP Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIP(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mip" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MIP
+ \details Writes the given value to the MIP Register.
+ \param [in] mip MIP Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MIP(unsigned long mip)
+{
+ __ASM volatile("csrw mip, %0" : : "r"(mip));
+}
+
+/**
+ \brief Get MCYCLEL Register
+ \details Returns the content of the MCYCLEL Register.
+ \return MCYCLE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCYCLE(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcycle" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCYCLE
+ \details Write MCYCLE Register
+ \param [in] value MCYCLE Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCYCLE(unsigned long value)
+{
+ __ASM volatile("csrw mcycle, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MCYCLEH Register
+ \details Returns the content of the MCYCLEH Register.
+ \return MCYCLEH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCYCLEH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mcycleh" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCYCLEH
+ \details Write MCYCLEH Register
+ \param [in] value MCYCLEH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCYCLEH(unsigned long value)
+{
+ __ASM volatile("csrw mcycleh, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MINSTRET Register
+ \details Returns the content of the MINSTRET Register.
+ \return MINSTRET Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINSTRET(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, minstret" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MINSTRET
+ \details Write MINSTRET Register
+ \param [in] value MINSTRET Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MINSTRET(unsigned long value)
+{
+ __ASM volatile("csrw minstret, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MINSTRETH Register
+ \details Returns the content of the MINSTRETH Register.
+ \return MINSTRETH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MINSTRETH(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, minstreth" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MINSTRETH
+ \details Write MINSTRETH Register
+ \param [in] value MINSTRETH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MINSTRETH(unsigned long value)
+{
+ __ASM volatile("csrw minstreth, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MVENDORID Register
+ \details Returns the content of the MVENDROID Register.
+ \return MVENDORID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MVENDORID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mvendorid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MARCHID Register
+ \details Returns the content of the MARCHID Register.
+ \return MARCHID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MARCHID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, marchid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MIMPID Register
+ \details Returns the content of the MIMPID Register.
+ \return MIMPID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIMPID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mimpid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MHARTID Register
+ \details Returns the content of the MHARTID Register.
+ \return MHARTID Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHARTID(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, mhartid" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get PMPCFGx Register
+ \details Returns the content of the PMPCFGx Register.
+ \return PMPCFGx Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG0(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg0" : "=r"(result));
+ return (result);
+}
+
+#if __riscv_xlen == 32
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG1(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg1" : "=r"(result));
+ return (result);
+}
+#endif
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG2(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg2" : "=r"(result));
+ return (result);
+}
+
+#if __riscv_xlen == 32
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPCFG3(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpcfg3" : "=r"(result));
+ return (result);
+}
+#endif
+
+/**
+ \brief Get PMPxCFG Register by index
+ \details Returns the content of the PMPxCFG Register.
+ \param [in] idx PMP region index
+ \return PMPxCFG Register value
+ */
+__STATIC_INLINE uint8_t __get_PMPxCFG(unsigned long idx)
+{
+ unsigned long pmpcfgx = 0;
+
+#if __riscv_xlen == 32
+ if (idx < 4) {
+ pmpcfgx = __get_PMPCFG0();
+ } else if (idx >= 4 && idx < 8) {
+ idx -= 4;
+ pmpcfgx = __get_PMPCFG1();
+ } else if (idx >= 8 && idx < 12) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ } else if (idx >= 12 && idx < 16) {
+ idx -= 12;
+ pmpcfgx = __get_PMPCFG3();
+ } else {
+ return 0;
+ }
+#else
+ if (idx < 8) {
+ pmpcfgx = __get_PMPCFG0();
+ } else if (idx >= 8 && idx < 16) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ } else {
+ return 0;
+ }
+#endif
+
+ return (uint8_t)((pmpcfgx & (0xFF << (idx << 3))) >> (idx << 3));
+}
+
+/**
+ \brief Set PMPCFGx
+ \details Writes the given value to the PMPCFGx Register.
+ \param [in] pmpcfg PMPCFGx Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_PMPCFG0(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg0, %0" : : "r"(pmpcfg));
+}
+
+#if __riscv_xlen == 32
+__ALWAYS_STATIC_INLINE void __set_PMPCFG1(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg1, %0" : : "r"(pmpcfg));
+}
+#endif
+
+__ALWAYS_STATIC_INLINE void __set_PMPCFG2(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg2, %0" : : "r"(pmpcfg));
+}
+
+#if __riscv_xlen == 32
+__ALWAYS_STATIC_INLINE void __set_PMPCFG3(unsigned long pmpcfg)
+{
+ __ASM volatile("csrw pmpcfg3, %0" : : "r"(pmpcfg));
+}
+#endif
+
+/**
+ \brief Set PMPxCFG by index
+ \details Writes the given value to the PMPxCFG Register.
+ \param [in] idx PMPx region index
+ \param [in] pmpxcfg PMPxCFG Register value to set
+ */
+__STATIC_INLINE void __set_PMPxCFG(unsigned long idx, uint8_t pmpxcfg)
+{
+ unsigned long pmpcfgx = 0;
+
+#if __riscv_xlen == 32
+ if (idx < 4) {
+ pmpcfgx = __get_PMPCFG0();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG0(pmpcfgx);
+ } else if (idx >= 4 && idx < 8) {
+ idx -= 4;
+ pmpcfgx = __get_PMPCFG1();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG1(pmpcfgx);
+ } else if (idx >= 8 && idx < 12) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG2(pmpcfgx);
+ } else if (idx >= 12 && idx < 16) {
+ idx -= 12;
+ pmpcfgx = __get_PMPCFG3();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG3(pmpcfgx);
+ } else {
+ return;
+ }
+#else
+ if (idx < 8) {
+ pmpcfgx = __get_PMPCFG0();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG0(pmpcfgx);
+ } else if (idx >= 8 && idx < 16) {
+ idx -= 8;
+ pmpcfgx = __get_PMPCFG2();
+ pmpcfgx = (pmpcfgx & ~(0xFF << (idx << 3))) | ((unsigned long)(pmpxcfg) << (idx << 3));
+ __set_PMPCFG2(pmpcfgx);
+ } else {
+ return;
+ }
+#endif
+}
+
+/**
+ \brief Get PMPADDRx Register
+ \details Returns the content of the PMPADDRx Register.
+ \return PMPADDRx Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR0(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr0" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR1(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr1" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR2(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr2" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR3(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr3" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR4(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr4" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR5(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr5" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR6(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr6" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR7(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr7" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR8(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr8" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR9(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr9" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR10(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr10" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR11(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr11" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR12(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr12" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR13(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr13" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR14(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr14" : "=r"(result));
+ return (result);
+}
+
+__ALWAYS_STATIC_INLINE unsigned long __get_PMPADDR15(void)
+{
+ unsigned long result;
+
+ __ASM volatile("csrr %0, pmpaddr15" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get PMPADDRx Register by index
+ \details Returns the content of the PMPADDRx Register.
+ \param [in] idx PMP region index
+ \return PMPADDRx Register value
+ */
+__STATIC_INLINE unsigned long __get_PMPADDRx(unsigned long idx)
+{
+ switch (idx) {
+ case 0:
+ return __get_PMPADDR0();
+
+ case 1:
+ return __get_PMPADDR1();
+
+ case 2:
+ return __get_PMPADDR2();
+
+ case 3:
+ return __get_PMPADDR3();
+
+ case 4:
+ return __get_PMPADDR4();
+
+ case 5:
+ return __get_PMPADDR5();
+
+ case 6:
+ return __get_PMPADDR6();
+
+ case 7:
+ return __get_PMPADDR7();
+
+ case 8:
+ return __get_PMPADDR8();
+
+ case 9:
+ return __get_PMPADDR9();
+
+ case 10:
+ return __get_PMPADDR10();
+
+ case 11:
+ return __get_PMPADDR11();
+
+ case 12:
+ return __get_PMPADDR12();
+
+ case 13:
+ return __get_PMPADDR13();
+
+ case 14:
+ return __get_PMPADDR14();
+
+ case 15:
+ return __get_PMPADDR15();
+
+ default:
+ return 0;
+ }
+}
+
+/**
+ \brief Set PMPADDRx
+ \details Writes the given value to the PMPADDRx Register.
+ \param [in] pmpaddr PMPADDRx Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_PMPADDR0(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr0, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR1(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr1, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR2(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr2, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR3(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr3, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR4(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr4, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR5(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr5, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR6(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr6, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR7(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr7, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR8(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr8, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR9(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr9, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR10(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr10, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR11(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr11, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR12(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr12, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR13(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr13, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR14(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr14, %0" : : "r"(pmpaddr));
+}
+
+__ALWAYS_STATIC_INLINE void __set_PMPADDR15(unsigned long pmpaddr)
+{
+ __ASM volatile("csrw pmpaddr15, %0" : : "r"(pmpaddr));
+}
+
+/**
+ \brief Set PMPADDRx by index
+ \details Writes the given value to the PMPADDRx Register.
+ \param [in] idx PMP region index
+ \param [in] pmpaddr PMPADDRx Register value to set
+ */
+__STATIC_INLINE void __set_PMPADDRx(unsigned long idx, unsigned long pmpaddr)
+{
+ switch (idx) {
+ case 0:
+ __set_PMPADDR0(pmpaddr);
+ break;
+
+ case 1:
+ __set_PMPADDR1(pmpaddr);
+ break;
+
+ case 2:
+ __set_PMPADDR2(pmpaddr);
+ break;
+
+ case 3:
+ __set_PMPADDR3(pmpaddr);
+ break;
+
+ case 4:
+ __set_PMPADDR4(pmpaddr);
+ break;
+
+ case 5:
+ __set_PMPADDR5(pmpaddr);
+ break;
+
+ case 6:
+ __set_PMPADDR6(pmpaddr);
+ break;
+
+ case 7:
+ __set_PMPADDR7(pmpaddr);
+ break;
+
+ case 8:
+ __set_PMPADDR8(pmpaddr);
+ break;
+
+ case 9:
+ __set_PMPADDR9(pmpaddr);
+ break;
+
+ case 10:
+ __set_PMPADDR10(pmpaddr);
+ break;
+
+ case 11:
+ __set_PMPADDR11(pmpaddr);
+ break;
+
+ case 12:
+ __set_PMPADDR12(pmpaddr);
+ break;
+
+ case 13:
+ __set_PMPADDR13(pmpaddr);
+ break;
+
+ case 14:
+ __set_PMPADDR14(pmpaddr);
+ break;
+
+ case 15:
+ __set_PMPADDR15(pmpaddr);
+ break;
+
+ default:
+ return;
+ }
+}
+
+/**
+ \brief Get MCOUNTEREN
+ \details Returns the content of the MCOUNTEREN Register.
+ \return MCOUNTEREN Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCOUNTEREN(void)
+{
+ uint32_t result;
+
+ __ASM volatile("csrr %0, mcounteren" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCOUNTEREN
+ \details Writes the given value to the MCOUNTEREN Register.
+ \param [in] mcounteren MCOUNTEREN Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCOUNTEREN(uint32_t mcounteren)
+{
+ __ASM volatile("csrw mcounteren, %0" : : "r"(mcounteren));
+}
+
+/**
+ \brief Get MCOUNTERWEN
+ \details Returns the content of the MCOUNTERWEN Register.
+ \return MCOUNTERWEN Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCOUNTERWEN(void)
+{
+ uint32_t result;
+
+ __ASM volatile("csrr %0, mcounterwen" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCOUNTERWEN
+ \details Writes the given value to the MCOUNTERWEN Register.
+ \param [in] mcounterwen MCOUNTERWEN Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCOUNTERWEN(uint32_t mcounterwen)
+{
+ __ASM volatile("csrw mcounterwen, %0" : : "r"(mcounterwen));
+}
+/**
+ \brief Set MEDELEG Register
+ \details Writes the given value to the MEDELEG Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_MEDELEG(unsigned long x)
+{
+ __ASM volatile("csrw medeleg, %0"::"r"(x));
+}
+
+/**
+ \brief Set MEDELEG Register
+ \details Writes the given value to the MEDELEG Register.
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEDELEG(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, medeleg":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Set MIDELEG Register
+ \details Writes the given value to the MIDELEG Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_MIDELEG(unsigned long x)
+{
+ __ASM volatile("csrw mideleg, %0"::"r"(x));
+}
+
+/**
+ \brief Get MIDELEG Register
+ \details Returns the content of the MIDELEG Register.
+ \return MIDELEG Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIDELEG(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, mideleg":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Set SSTATUS Register
+ \details Writes the given value to the SSTATUS Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_SSTATUS(unsigned long x)
+{
+ __ASM volatile("csrw sstatus, %0"::"r"(x));
+}
+
+/**
+ \brief Get SSTATUS Register
+ \details Returns the content of the SSTATUS Register.
+ \return SSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SSTATUS(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, sstatus":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Set SXSTATUS Register
+ \details Writes the given value to the SXSTATUS Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_SXSTATUS(unsigned long x)
+{
+ __ASM volatile("csrw sxstatus, %0"::"r"(x));
+}
+
+/**
+ \brief Get SXSTATUS Register
+ \details Returns the content of the SXSTATUS Register.
+ \return SXSTATUS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get__SXSTATUS(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, sxstatus":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Set SIE Register
+ \details Writes the given value to the SIE Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_SIE(unsigned long x)
+{
+ __ASM volatile("csrw sie, %0"::"r"(x));
+}
+
+/**
+ \brief Get SIE Register
+ \details Returns the content of the SIE Register.
+ \return SIE Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SIE(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, sie":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Set STVAC Register
+ \details Writes the given value to the STVEC Register.
+ */
+__ALWAYS_STATIC_INLINE void __set_STVEC(unsigned long x)
+{
+ __ASM volatile("csrw stvec, %0"::"r"(x));
+}
+
+/**
+ \brief Get STVAC Register
+ \details Returns the content of the STVAC Register.
+ \return STVAC Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_STVEC(void)
+{
+ unsigned long x;
+ __ASM volatile("csrr %0, stvec":"=r"(x));
+ return x;
+}
+
+/**
+ \brief Enable interrupts and exceptions
+ \details Enables interrupts and exceptions by setting the IE-bit and EE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __enable_excp_irq(void)
+{
+#ifdef CONFIG_MMU
+ __enable_supervisor_irq();
+#else
+ __enable_irq();
+#endif
+}
+
+
+/**
+ \brief Disable interrupts and exceptions
+ \details Disables interrupts and exceptions by clearing the IE-bit and EE-bit in the PSR.
+ Can only be executed in Privileged modes.
+ */
+__ALWAYS_STATIC_INLINE void __disable_excp_irq(void)
+{
+#ifdef CONFIG_MMU
+ __disable_supervisor_irq();
+#else
+ __disable_irq();
+#endif
+}
+
+#define __CSI_GCC_OUT_REG(r) "=r" (r)
+#define __CSI_GCC_USE_REG(r) "r" (r)
+
+/**
+ \brief No Operation
+ \details No Operation does nothing. This instruction can be used for code alignment purposes.
+ */
+__ALWAYS_STATIC_INLINE void __NOP(void)
+{
+ __ASM volatile("nop");
+}
+
+/**
+ \brief return from S-MODE
+ \details return from S-MODE.
+ */
+__ALWAYS_STATIC_INLINE void __SRET(void)
+{
+ __ASM volatile("sret");
+}
+
+/**
+ \brief return from M-MODE
+ \details return from M-MODE.
+ */
+__ALWAYS_STATIC_INLINE void __MRET(void)
+{
+ __ASM volatile("mret");
+}
+
+/**
+ \brief Wait For Interrupt
+ \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
+ */
+__ALWAYS_STATIC_INLINE void __WFI(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Wait For Interrupt
+ \details Wait For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __WAIT(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Doze For Interrupt
+ \details Doze For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __DOZE(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Stop For Interrupt
+ \details Stop For Interrupt is a hint instruction that suspends execution until one interrupt occurs.
+ */
+__ALWAYS_STATIC_INLINE void __STOP(void)
+{
+ __ASM volatile("wfi");
+}
+
+/**
+ \brief Instruction Synchronization Barrier
+ \details Instruction Synchronization Barrier flushes the pipeline in the processor,
+ so that all instructions following the ISB are fetched from cache or memory,
+ after the instruction has been completed.
+ */
+__ALWAYS_STATIC_INLINE void __ISB(void)
+{
+ __ASM volatile("fence.i");
+ __ASM volatile("fence r, r");
+}
+
+
+/**
+ \brief Data Synchronization Barrier
+ \details Acts as a special kind of Data Memory Barrier.
+ It completes when all explicit memory accesses before this instruction complete.
+ */
+__ALWAYS_STATIC_INLINE void __DSB(void)
+{
+ __ASM volatile("fence iorw, iorw");
+#if __riscv_xtheadsync
+ __ASM volatile("sync");
+#endif
+}
+
+/**
+ \brief Data Memory Barrier
+ \details Ensures the apparent order of the explicit memory operations before
+ and after the instruction, without ensuring their completion.
+ */
+__ALWAYS_STATIC_INLINE void __DMB(void)
+{
+ __ASM volatile("fence rw, rw");
+}
+
+/**
+ \brief Data Synchronization Barrier
+ \details Acts as a special kind of Data Memory Barrier.
+ It completes when all explicit memory accesses before this instruction complete.
+ */
+__ALWAYS_STATIC_INLINE void __SYNC_IS(void)
+{
+#if __riscv_xtheadsync
+ __ASM volatile("sync.is");
+#endif
+}
+
+/**
+ \brief Invalid all icache
+ \details invalid all icache.
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.iall");
+#endif
+}
+
+/**
+ \brief Invalid all icache and broadcast to other cores
+ \details Invalid all icache and broadcast to other cores
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IALLS(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.ialls");
+#endif
+}
+
+/**
+ \brief Invalid Icache by physical addr
+ \details Invalid Icache by physical addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.ipa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid Icache by virsual addr
+ \details Invalid Icache by virsual addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __ICACHE_IVA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("icache.iva %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid all L1dcache
+ \details invalid all L1dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_IALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.iall");
+#endif
+}
+
+/**
+ \brief Clear all dcache
+ \details clear all dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.call");
+#endif
+}
+
+/**
+ \brief Clear & invalid all dcache
+ \details clear & invalid all dcache.
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CIALL(void)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.ciall");
+#endif
+}
+
+/**
+ \brief Clear & Invalid Dcache by way/set
+ \details Clear & Invalid Dcache by way/set
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CISW(unsigned long wayset)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cisw %0" : : "r"(wayset));
+#endif
+}
+
+#if CBO_INSN_SUPPORT
+/**
+ \brief Clear Dcache/L2cache by addr
+ \details Clear Dcache/L2cache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __CBO_CLEAN(unsigned long addr)
+{
+ __ASM volatile("cbo.clean 0(%0)" : : "r"(addr));
+}
+
+/**
+ \brief Clear & Invalid Dcache/L2cache by addr
+ \details Clear & Invalid Dcache/L2cache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __CBO_FLUSH(unsigned long addr)
+{
+ __ASM volatile("cbo.flush 0(%0)" : : "r"(addr));
+}
+
+/**
+ \brief Invalid Dcache/L2cache by addr
+ \details Invalid Dcache/L2cache by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __CBO_INVAL(unsigned long addr)
+{
+ __ASM volatile("cbo.inval 0(%0)" : : "r"(addr));
+}
+
+/**
+ \brief Set Dcache to zero by addr
+ \details Set Dcache to zero by addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __CBO_ZERO(unsigned long addr)
+{
+ __ASM volatile("cbo.zero %0" : : "r"(addr));
+}
+#else
+/**
+ \brief Clear Dcache/L2cache by physical addr
+ \details Clear Dcache/L2cache by physical addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cpa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear Dcache/L2cache by virsual addr
+ \details Clear Dcache/L2cache by virsual addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CVA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cva %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear & Invalid Dcache by physical addr
+ \details Clear & Invalid Dcache by physical addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CIPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cipa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear & Invalid Dcache by virsual addr
+ \details Clear & Invalid Dcache by virsual addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CIVA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.civa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid Dcache/L2cache by physical addr
+ \details Invalid Dcache/L2cache by physical addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_IPA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.ipa %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid Dcache/L2cache by virsual addr
+ \details Invalid Dcache/L2cache by virsual addr.
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_IVA(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.iva %0" : : "r"(addr));
+#endif
+}
+
+#endif
+
+/**
+ \brief Clear L1-Dcache by physical addr and broadcast to other cores
+ \details Clear L1-Dcache by physical addr and broadcast to other cores
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CPAL1(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cpal1 %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Clear L1-Dcache by virsual addr and broadcast to other cores
+ \details Clear L1-Dcache by virsual addr and broadcast to other cores
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_CVAL1(unsigned long addr)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.cval1 %0" : : "r"(addr));
+#endif
+}
+
+/**
+ \brief Invalid Dcache by way/set
+ \details Invalid Dcache by way/set
+ \param [in] addr operate addr
+ */
+__ALWAYS_STATIC_INLINE void __DCACHE_ISW(unsigned long wayset)
+{
+#if __riscv_xtheadcmo
+ __ASM volatile("dcache.isw %0" : : "r"(wayset));
+#endif
+}
+
+#if (__L2CACHE_PRESENT == 1U)
+/**
+ \brief Invalid L2 cache
+ \details invalid L2 cache.
+ */
+__ALWAYS_STATIC_INLINE void __L2CACHE_IALL(void)
+{
+ __ASM volatile("l2cache.iall");
+}
+
+/**
+ \brief Clear L2cache
+ \details clear L2cache.
+ */
+__ALWAYS_STATIC_INLINE void __L2CACHE_CALL(void)
+{
+ __ASM volatile("l2cache.call");
+}
+
+/**
+ \brief Clear&invalid L2cache
+ \details clear & invalid L2cache.
+ */
+__ALWAYS_STATIC_INLINE void __L2CACHE_CIALL(void)
+{
+ __ASM volatile("l2cache.ciall");
+}
+#endif
+
+/**
+ \brief Get SATP
+ \details Returns the current value of the SATP.
+ \return SATP Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SATP(void)
+{
+ register unsigned long result;
+
+ __ASM volatile("csrr %0, satp" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SATP
+ \details Assigns the given value to the SATP.
+ \param [in] satp SATP value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SATP(unsigned long satp)
+{
+ __ASM volatile("sfence.vma");
+ __ASM volatile("csrw satp, %0" : : "r"(satp));
+}
+
+/**
+ \brief Get SCER2
+ \details Returns the current value of the SCER2.
+ \return SCER2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SCER2(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, scer2" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SCER2
+ \details Assigns the given value to the SCER2.
+ \param [in] scer2 SCER2 value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SCER2(unsigned long scer2)
+{
+ __ASM volatile("csrw scer2, %0" : : "r"(scer2));
+}
+
+/**
+ \brief Get MCER2
+ \details Returns the current value of the MCER2.
+ \return MCER2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCER2(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, mcer2" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCER2
+ \details Assigns the given value to the MCER2.
+ \param [in] mcer2 MCER2 value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCER2(unsigned long mcer2)
+{
+ __ASM volatile("csrw mcer2, %0" : : "r"(mcer2));
+}
+
+#if __riscv_xlen == 32
+/**
+ \brief Get MCER2H
+ \details Returns the current value of the MCER2H.
+ \return MCER2H Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCER2H(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, mcer2h" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCER2H
+ \details Assigns the given value to the MCER2H.
+ \param [in] mcer2h MCER2H value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCER2H(unsigned long mcer2h)
+{
+ __ASM volatile("csrw mcer2h, %0" : : "r"(mcer2h));
+}
+#endif
+
+/**
+ \brief Get SSBEPA2
+ \details Returns the current value of the SSBEPA2.
+ \return SSBEPA2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SSBEPA2(void)
+{
+ register unsigned long result;
+ //__ASM volatile("csrr %0, ssbepa2" : "=r"(result));
+ __ASM volatile("csrr %0, 0x5d2" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SSBEPA2
+ \details Assigns the given value to the SSBEPA2.
+ \param [in] ssbepa2 SSBEPA2 value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SSBEPA2(unsigned long ssbepa2)
+{
+ //__ASM volatile("csrw ssbepa2, %0" : : "r"(ssbepa2));
+ __ASM volatile("csrw 0x5d2, %0" : : "r"(ssbepa2));
+}
+
+/**
+ \brief Get MSBEPA2
+ \details Returns the current value of the MSBEPA2.
+ \return MSBEPA2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSBEPA2(void)
+{
+ register unsigned long result;
+ //__ASM volatile("csrr %0, msbepa2" : "=r"(result));
+ __ASM volatile("csrr %0, 0x7fc" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSBEPA2
+ \details Assigns the given value to the MSBEPA2.
+ \param [in] msbepa2 MSBEPA2 value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSBEPA2(unsigned long msbepa2)
+{
+ //__ASM volatile("csrw msbepa2, %0" : : "r"(msbepa2));
+ __ASM volatile("csrw 0x7fc, %0" : : "r"(msbepa2));
+}
+
+/**
+ \brief Get SCER
+ \details Returns the current value of the SCER.
+ \return SCER Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SCER(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, scer" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SCER
+ \details Assigns the given value to the SCER.
+ \param [in] scer SCER value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SCER(unsigned long scer)
+{
+ __ASM volatile("csrw scer, %0" : : "r"(scer));
+}
+
+/**
+ \brief Get MCER
+ \details Returns the current value of the MCER.
+ \return MCER Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCER(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, mcer" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCER
+ \details Assigns the given value to the MCER.
+ \param [in] mcer MCER value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCER(unsigned long mcer)
+{
+ __ASM volatile("csrw mcer, %0" : : "r"(mcer));
+}
+
+#if __riscv_xlen == 32
+/**
+ \brief Get MCERH
+ \details Returns the current value of the MCERH.
+ \return MCERH Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MCERH(void)
+{
+ register unsigned long result;
+ __ASM volatile("csrr %0, mcerh" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MCERH
+ \details Assigns the given value to the MCERH.
+ \param [in] mcerh MCERH value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCERH(unsigned long mcerh)
+{
+ __ASM volatile("csrw mcerh, %0" : : "r"(mcerh));
+}
+#endif
+
+/**
+ \brief Get SSBEPA
+ \details Returns the current value of the SSBEPA.
+ \return SSBEPA Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_SSBEPA(void)
+{
+ register unsigned long result;
+ //__ASM volatile("csrr %0, ssbepa" : "=r"(result));
+ __ASM volatile("csrr %0, 0x5d1" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set SSBEPA
+ \details Assigns the given value to the SSBEPA.
+ \param [in] ssbepa SSBEPA value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_SSBEPA(unsigned long ssbepa)
+{
+ //__ASM volatile("csrw ssbepa, %0" : : "r"(ssbepa));
+ __ASM volatile("csrw 0x5d1, %0" : : "r"(ssbepa));
+}
+
+/**
+ \brief Get MSBEPA
+ \details Returns the current value of the MSBEPA.
+ \return MSBEPA Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MSBEPA(void)
+{
+ register unsigned long result;
+ //__ASM volatile("csrr %0, msbepa" : "=r"(result));
+ __ASM volatile("csrr %0, 0x7fb" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MSBEPA
+ \details Assigns the given value to the MSBEPA.
+ \param [in] msbepa MSBEPA value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MSBEPA(unsigned long msbepa)
+{
+ //__ASM volatile("csrw msbepa, %0" : : "r"(msbepa));
+ __ASM volatile("csrw 0x7fb, %0" : : "r"(msbepa));
+}
+
+/**
+ \brief Get ERRSTS
+ \details Returns the current value of the ERRSTS.
+ \return ERRSTS Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MIESR(void)
+{
+ register unsigned long result;
+
+ __ASM volatile("csrr %0, miesr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Get MEICR2
+ \details Returns the current value of the MEICR2.
+ \return MEICR2 Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEICR2(void)
+{
+ register unsigned long result;
+
+ __ASM volatile("csrr %0, meicr2" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MEICR2
+ \details Assigns the given value to the MEICR2.
+ \param [in] errinjcr MEICR2 value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MEICR2(unsigned long meicr2)
+{
+ __ASM volatile("csrw meicr2, %0" : : "r"(meicr2));
+}
+
+/**
+ \brief Get MEICR
+ \details Returns the current value of the MEICR.
+ \return MEICR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MEICR(void)
+{
+ register unsigned long result;
+
+ __ASM volatile("csrr %0, meicr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MEICR
+ \details Assigns the given value to the MEICR.
+ \param [in] errinjcr MEICR value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MEICR(unsigned long meicr)
+{
+ __ASM volatile("csrw meicr, %0" : : "r"(meicr));
+}
+
+/**
+ \brief Get ITCMCR
+ \details Returns the content of the ITCMCR Register.
+ \return ITCMCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MITCMCR(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mitcmcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set ITCMCR
+ \details Writes the given value to the ITCMCR Register.
+ \param [in] itcmcr ITCMCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MITCMCR(unsigned long itcmcr)
+{
+ __ASM volatile("csrw mitcmcr, %0" : : "r"(itcmcr));
+}
+
+/**
+ \brief Get DTCMCR
+ \details Returns the content of the DTCMCR Register.
+ \return DTCMCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MDTCMCR(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mdtcmcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set DTCMCR
+ \details Writes the given value to the DTCMCR Register.
+ \param [in] dtcmcr DTCMCR Registed value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MDTCMCR(unsigned long dtcmcr)
+{
+ __ASM volatile("csrw mdtcmcr, %0" : : "r"(dtcmcr));
+}
+
+/**
+ \brief Get MFPPCR
+ \details Read MFPPCR Register.
+ \return MFPPCR Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MFPPCR(void)
+{
+ unsigned long result;
+ __ASM volatile("csrr %0, mfppcr" : "=r"(result));
+ return (result);
+}
+
+/**
+ \brief Set MFPPCR
+ \details Write MFPPCR Register.
+ \param [in] fppcr MFPPCR Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MFPPCR(unsigned long fppcr)
+{
+ __ASM volatile("csrw mfppcr, %0" : : "r"(fppcr));
+}
+
+/**
+ \brief Set MCOUNTINHIBIT
+ \details Write MCOUNTINHIBIT Register.
+ \param [in] value MCOUNTINHIBIT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MCOUNTINHIBIT(uint32_t value)
+{
+ __ASM volatile("csrw mcountinhibit, %0" : : "r"(value));
+}
+
+/**
+ \brief Get MCOUNTINHIBIT
+ \details Read MCOUNTINHIBIT Register
+ \return MCOUNTINHIBIT Register value
+ */
+__ALWAYS_STATIC_INLINE unsigned int __get_MCOUNTINHIBIT(void)
+{
+ uint32_t result;
+ __ASM volatile("csrr %0, mcountinhibit" : "=r"(result));
+ return result;
+}
+
+/**
+ \brief Set MHPMEVENT
+ \details Write MHPMEVENT Register
+ \param [in] idx Index of MHPMEVENT Register
+ \param [in] value MHPMEVENT Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMEVENT(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 0: rv_csr_write(0x7E0, value); break;
+ case 2: rv_csr_write(0x7E1, value); break;
+ case 3: rv_csr_write(0x323, value); break;
+ case 4: rv_csr_write(0x324, value); break;
+ case 5: rv_csr_write(0x325, value); break;
+ case 6: rv_csr_write(0x326, value); break;
+ case 7: rv_csr_write(0x327, value); break;
+ case 8: rv_csr_write(0x328, value); break;
+ case 9: rv_csr_write(0x329, value); break;
+ case 10: rv_csr_write(0x32a, value); break;
+ case 11: rv_csr_write(0x32b, value); break;
+ case 12: rv_csr_write(0x32c, value); break;
+ case 13: rv_csr_write(0x32d, value); break;
+ case 14: rv_csr_write(0x32e, value); break;
+ case 15: rv_csr_write(0x32f, value); break;
+ case 16: rv_csr_write(0x330, value); break;
+ case 17: rv_csr_write(0x331, value); break;
+ case 18: rv_csr_write(0x332, value); break;
+ case 19: rv_csr_write(0x333, value); break;
+ case 20: rv_csr_write(0x334, value); break;
+ case 21: rv_csr_write(0x335, value); break;
+ case 22: rv_csr_write(0x336, value); break;
+ case 23: rv_csr_write(0x337, value); break;
+ case 24: rv_csr_write(0x338, value); break;
+ case 25: rv_csr_write(0x339, value); break;
+ case 26: rv_csr_write(0x33a, value); break;
+ case 27: rv_csr_write(0x33b, value); break;
+ case 28: rv_csr_write(0x33c, value); break;
+ case 29: rv_csr_write(0x33d, value); break;
+ case 30: rv_csr_write(0x33e, value); break;
+ case 31: rv_csr_write(0x33F, value); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMEVENT
+ \details Read MHPMEVENT Register.
+ \param [in] idx Index of MHPMEVENT Register to read.
+ \return MHPMEVENT Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMEVENT(unsigned long idx)
+{
+ switch (idx) {
+ case 0: return rv_csr_read(0x7E0);
+ case 2: return rv_csr_read(0x7E1);
+ case 3: return rv_csr_read(0x323);
+ case 4: return rv_csr_read(0x324);
+ case 5: return rv_csr_read(0x325);
+ case 6: return rv_csr_read(0x326);
+ case 7: return rv_csr_read(0x327);
+ case 8: return rv_csr_read(0x328);
+ case 9: return rv_csr_read(0x329);
+ case 10: return rv_csr_read(0x32a);
+ case 11: return rv_csr_read(0x32b);
+ case 12: return rv_csr_read(0x32c);
+ case 13: return rv_csr_read(0x32d);
+ case 14: return rv_csr_read(0x32e);
+ case 15: return rv_csr_read(0x32f);
+ case 16: return rv_csr_read(0x330);
+ case 17: return rv_csr_read(0x331);
+ case 18: return rv_csr_read(0x332);
+ case 19: return rv_csr_read(0x333);
+ case 20: return rv_csr_read(0x334);
+ case 21: return rv_csr_read(0x335);
+ case 22: return rv_csr_read(0x336);
+ case 23: return rv_csr_read(0x337);
+ case 24: return rv_csr_read(0x338);
+ case 25: return rv_csr_read(0x339);
+ case 26: return rv_csr_read(0x33a);
+ case 27: return rv_csr_read(0x33b);
+ case 28: return rv_csr_read(0x33c);
+ case 29: return rv_csr_read(0x33d);
+ case 30: return rv_csr_read(0x33e);
+ case 31: return rv_csr_read(0x33F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMEVENTH
+ \details Write MHPMEVENTH Register
+ \param [in] idx Index of MHPMEVENT Register
+ \param [in] value MHPMEVENTH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMEVENTH(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0x723, value); break;
+ case 4: rv_csr_write(0x724, value); break;
+ case 5: rv_csr_write(0x725, value); break;
+ case 6: rv_csr_write(0x726, value); break;
+ case 7: rv_csr_write(0x727, value); break;
+ case 8: rv_csr_write(0x728, value); break;
+ case 9: rv_csr_write(0x729, value); break;
+ case 10: rv_csr_write(0x72A, value); break;
+ case 11: rv_csr_write(0x72B, value); break;
+ case 12: rv_csr_write(0x72C, value); break;
+ case 13: rv_csr_write(0x72D, value); break;
+ case 14: rv_csr_write(0x72E, value); break;
+ case 15: rv_csr_write(0x72F, value); break;
+ case 16: rv_csr_write(0x730, value); break;
+ case 17: rv_csr_write(0x731, value); break;
+ case 18: rv_csr_write(0x732, value); break;
+ case 19: rv_csr_write(0x733, value); break;
+ case 20: rv_csr_write(0x734, value); break;
+ case 21: rv_csr_write(0x735, value); break;
+ case 22: rv_csr_write(0x736, value); break;
+ case 23: rv_csr_write(0x737, value); break;
+ case 24: rv_csr_write(0x738, value); break;
+ case 25: rv_csr_write(0x739, value); break;
+ case 26: rv_csr_write(0x73A, value); break;
+ case 27: rv_csr_write(0x73B, value); break;
+ case 28: rv_csr_write(0x73C, value); break;
+ case 29: rv_csr_write(0x73D, value); break;
+ case 30: rv_csr_write(0x73E, value); break;
+ case 31: rv_csr_write(0x73F, value); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMEVENTH
+ \details Read MHPMEVENTH Register.
+ \param [in] idx Index of MHPMEVENTH Register to read.
+ \return MHPMEVENTH Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMEVENTH(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0x723);
+ case 4: return rv_csr_read(0x724);
+ case 5: return rv_csr_read(0x725);
+ case 6: return rv_csr_read(0x726);
+ case 7: return rv_csr_read(0x727);
+ case 8: return rv_csr_read(0x728);
+ case 9: return rv_csr_read(0x729);
+ case 10: return rv_csr_read(0x72A);
+ case 11: return rv_csr_read(0x72B);
+ case 12: return rv_csr_read(0x72C);
+ case 13: return rv_csr_read(0x72D);
+ case 14: return rv_csr_read(0x72E);
+ case 15: return rv_csr_read(0x72F);
+ case 16: return rv_csr_read(0x730);
+ case 17: return rv_csr_read(0x731);
+ case 18: return rv_csr_read(0x732);
+ case 19: return rv_csr_read(0x733);
+ case 20: return rv_csr_read(0x734);
+ case 21: return rv_csr_read(0x735);
+ case 22: return rv_csr_read(0x736);
+ case 23: return rv_csr_read(0x737);
+ case 24: return rv_csr_read(0x738);
+ case 25: return rv_csr_read(0x739);
+ case 26: return rv_csr_read(0x73A);
+ case 27: return rv_csr_read(0x73B);
+ case 28: return rv_csr_read(0x73C);
+ case 29: return rv_csr_read(0x73D);
+ case 30: return rv_csr_read(0x73E);
+ case 31: return rv_csr_read(0x73F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMCOUNTER
+ \details Write MHPMCOUNTER Register
+ \param [in] idx Index of MHPMCOUNTER Register
+ \param [in] value MHPMCOUNTER Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMCOUNTER(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0xB03, (value)); break;
+ case 4: rv_csr_write(0xB04, (value)); break;
+ case 5: rv_csr_write(0xB05, (value)); break;
+ case 6: rv_csr_write(0xB06, (value)); break;
+ case 7: rv_csr_write(0xB07, (value)); break;
+ case 8: rv_csr_write(0xB08, (value)); break;
+ case 9: rv_csr_write(0xB09, (value)); break;
+ case 10: rv_csr_write(0xB0A, (value)); break;
+ case 11: rv_csr_write(0xB0B, (value)); break;
+ case 12: rv_csr_write(0xB0C, (value)); break;
+ case 13: rv_csr_write(0xB0D, (value)); break;
+ case 14: rv_csr_write(0xB0E, (value)); break;
+ case 15: rv_csr_write(0xB0F, (value)); break;
+ case 16: rv_csr_write(0xB10, (value)); break;
+ case 17: rv_csr_write(0xB11, (value)); break;
+ case 18: rv_csr_write(0xB12, (value)); break;
+ case 19: rv_csr_write(0xB13, (value)); break;
+ case 20: rv_csr_write(0xB14, (value)); break;
+ case 21: rv_csr_write(0xB15, (value)); break;
+ case 22: rv_csr_write(0xB16, (value)); break;
+ case 23: rv_csr_write(0xB17, (value)); break;
+ case 24: rv_csr_write(0xB18, (value)); break;
+ case 25: rv_csr_write(0xB19, (value)); break;
+ case 26: rv_csr_write(0xB1A, (value)); break;
+ case 27: rv_csr_write(0xB1B, (value)); break;
+ case 28: rv_csr_write(0xB1C, (value)); break;
+ case 29: rv_csr_write(0xB1D, (value)); break;
+ case 30: rv_csr_write(0xB1E, (value)); break;
+ case 31: rv_csr_write(0xB1F, (value)); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMCOUNTER
+ \details Write MHPMCOUNTER Register.
+ \param [in] idx Index of MHPMCOUNTER Register
+ \return MHPMCOUNTER Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMCOUNTER(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0xB03);
+ case 4: return rv_csr_read(0xB04);
+ case 5: return rv_csr_read(0xB05);
+ case 6: return rv_csr_read(0xB06);
+ case 7: return rv_csr_read(0xB07);
+ case 8: return rv_csr_read(0xB08);
+ case 9: return rv_csr_read(0xB09);
+ case 10: return rv_csr_read(0xB0A);
+ case 11: return rv_csr_read(0xB0B);
+ case 12: return rv_csr_read(0xB0C);
+ case 13: return rv_csr_read(0xB0D);
+ case 14: return rv_csr_read(0xB0E);
+ case 15: return rv_csr_read(0xB0F);
+ case 16: return rv_csr_read(0xB10);
+ case 17: return rv_csr_read(0xB11);
+ case 18: return rv_csr_read(0xB12);
+ case 19: return rv_csr_read(0xB13);
+ case 20: return rv_csr_read(0xB14);
+ case 21: return rv_csr_read(0xB15);
+ case 22: return rv_csr_read(0xB16);
+ case 23: return rv_csr_read(0xB17);
+ case 24: return rv_csr_read(0xB18);
+ case 25: return rv_csr_read(0xB19);
+ case 26: return rv_csr_read(0xB1A);
+ case 27: return rv_csr_read(0xB1B);
+ case 28: return rv_csr_read(0xB1C);
+ case 29: return rv_csr_read(0xB1D);
+ case 30: return rv_csr_read(0xB1E);
+ case 31: return rv_csr_read(0xB1F);
+ default: return 0;
+ }
+}
+
+/**
+ \brief Set MHPMCOUNTERH
+ \details Write MHPMCOUNTERH Register
+ \param [in] idx Index of MHPMCOUNTERH Register
+ \param [in] value MHPMCOUNTERH Register value to set
+ */
+__ALWAYS_STATIC_INLINE void __set_MHPMCOUNTERH(unsigned long idx, unsigned long value)
+{
+ switch (idx) {
+ case 3: rv_csr_write(0xB83, (value)); break;
+ case 4: rv_csr_write(0xB84, (value)); break;
+ case 5: rv_csr_write(0xB85, (value)); break;
+ case 6: rv_csr_write(0xB86, (value)); break;
+ case 7: rv_csr_write(0xB87, (value)); break;
+ case 8: rv_csr_write(0xB88, (value)); break;
+ case 9: rv_csr_write(0xB89, (value)); break;
+ case 10: rv_csr_write(0xB8A, (value)); break;
+ case 11: rv_csr_write(0xB8B, (value)); break;
+ case 12: rv_csr_write(0xB8C, (value)); break;
+ case 13: rv_csr_write(0xB8D, (value)); break;
+ case 14: rv_csr_write(0xB8E, (value)); break;
+ case 15: rv_csr_write(0xB8F, (value)); break;
+ case 16: rv_csr_write(0xB90, (value)); break;
+ case 17: rv_csr_write(0xB91, (value)); break;
+ case 18: rv_csr_write(0xB92, (value)); break;
+ case 19: rv_csr_write(0xB93, (value)); break;
+ case 20: rv_csr_write(0xB94, (value)); break;
+ case 21: rv_csr_write(0xB95, (value)); break;
+ case 22: rv_csr_write(0xB96, (value)); break;
+ case 23: rv_csr_write(0xB97, (value)); break;
+ case 24: rv_csr_write(0xB98, (value)); break;
+ case 25: rv_csr_write(0xB99, (value)); break;
+ case 26: rv_csr_write(0xB9A, (value)); break;
+ case 27: rv_csr_write(0xB9B, (value)); break;
+ case 28: rv_csr_write(0xB9C, (value)); break;
+ case 29: rv_csr_write(0xB9D, (value)); break;
+ case 30: rv_csr_write(0xB9E, (value)); break;
+ case 31: rv_csr_write(0xB9F, (value)); break;
+ default: break;
+ }
+}
+
+/**
+ \brief Get MHPMCOUNTERH
+ \details Write MHPMCOUNTERH Register.
+ \param [in] idx Index of MHPMCOUNTERH Register
+ \return MHPMCOUNTERH Register Value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __get_MHPMCOUNTERH(unsigned long idx)
+{
+ switch (idx) {
+ case 3: return rv_csr_read(0xB83);
+ case 4: return rv_csr_read(0xB84);
+ case 5: return rv_csr_read(0xB85);
+ case 6: return rv_csr_read(0xB86);
+ case 7: return rv_csr_read(0xB87);
+ case 8: return rv_csr_read(0xB88);
+ case 9: return rv_csr_read(0xB89);
+ case 10: return rv_csr_read(0xB8A);
+ case 11: return rv_csr_read(0xB8B);
+ case 12: return rv_csr_read(0xB8C);
+ case 13: return rv_csr_read(0xB8D);
+ case 14: return rv_csr_read(0xB8E);
+ case 15: return rv_csr_read(0xB8F);
+ case 16: return rv_csr_read(0xB90);
+ case 17: return rv_csr_read(0xB91);
+ case 18: return rv_csr_read(0xB92);
+ case 19: return rv_csr_read(0xB93);
+ case 20: return rv_csr_read(0xB94);
+ case 21: return rv_csr_read(0xB95);
+ case 22: return rv_csr_read(0xB96);
+ case 23: return rv_csr_read(0xB97);
+ case 24: return rv_csr_read(0xB98);
+ case 25: return rv_csr_read(0xB99);
+ case 26: return rv_csr_read(0xB9A);
+ case 27: return rv_csr_read(0xB9B);
+ case 28: return rv_csr_read(0xB9C);
+ case 29: return rv_csr_read(0xB9D);
+ case 30: return rv_csr_read(0xB9E);
+ case 31: return rv_csr_read(0xB9F);
+ default: return 0;
+ }
+}
+
+#if 0
+/**
+ \brief Reverse byte order (32 bit)
+ \details Reverses the byte order in integer value.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE unsigned long __REV(unsigned long value)
+{
+ return __builtin_bswap32(value);
+}
+
+
+/**
+ \brief Reverse byte order (16 bit)
+ \details Reverses the byte order in two unsigned short values.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __REV16(uint32_t value)
+{
+ uint32_t result;
+
+ result = ((value & 0xFF000000) >> 8) | ((value & 0x00FF0000) << 8) |
+ ((value & 0x0000FF00) >> 8) | ((value & 0x000000FF) << 8);
+
+ return (result);
+}
+
+
+/**
+ \brief Reverse byte order in signed short value
+ \details Reverses the byte order in a signed short value with sign extension to integer.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE int32_t __REVSH(int32_t value)
+{
+ return (short)(((value & 0xFF00) >> 8) | ((value & 0x00FF) << 8));
+}
+
+
+/**
+ \brief Rotate Right in unsigned value (32 bit)
+ \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
+ \param [in] op1 Value to rotate
+ \param [in] op2 Number of Bits to rotate
+ \return Rotated value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
+{
+ return (op1 >> op2) | (op1 << (32U - op2));
+}
+
+
+/**
+ \brief Breakpoint
+ \details Causes the processor to enter Debug state
+ Debug tools can use this to investigate system state when the instruction at a particular address is reached.
+ */
+__ALWAYS_STATIC_INLINE void __BKPT(void)
+{
+ __ASM volatile("ebreak");
+}
+
+/**
+ \brief Reverse bit order of value
+ \details Reverses the bit order of the given value.
+ \param [in] value Value to reverse
+ \return Reversed value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __RBIT(uint32_t value)
+{
+ uint32_t result;
+
+ int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */
+
+ result = value; /* r will be reversed bits of v; first get LSB of v */
+
+ for (value >>= 1U; value; value >>= 1U) {
+ result <<= 1U;
+ result |= value & 1U;
+ s--;
+ }
+
+ result <<= s; /* shift when v's highest bits are zero */
+
+ return (result);
+}
+
+
+/**
+ \brief Count leading zeros
+ \details Counts the number of leading zeros of a data value.
+ \param [in] value Value to count the leading zeros
+ \return number of leading zeros in value
+ */
+#define __CLZ __builtin_clz
+/**
+ \details This function saturates a signed value.
+ \param [in] x Value to be saturated
+ \param [in] y Bit position to saturate to [1..32]
+ \return Saturated value.
+ */
+__ALWAYS_STATIC_INLINE int32_t __SSAT(int32_t x, uint32_t y)
+{
+ int32_t posMax, negMin;
+ uint32_t i;
+
+ posMax = 1;
+
+ for (i = 0; i < (y - 1); i++) {
+ posMax = posMax * 2;
+ }
+
+ if (x > 0) {
+ posMax = (posMax - 1);
+
+ if (x > posMax) {
+ x = posMax;
+ }
+
+// x &= (posMax * 2 + 1);
+ } else {
+ negMin = -posMax;
+
+ if (x < negMin) {
+ x = negMin;
+ }
+
+// x &= (posMax * 2 - 1);
+ }
+
+ return (x);
+}
+
+/**
+ \brief Unsigned Saturate
+ \details Saturates an unsigned value.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (0..31)
+ \return Saturated value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USAT(uint32_t value, uint32_t sat)
+{
+ uint32_t result;
+
+ if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) {
+ result = 0xFFFFFFFF >> (32 - sat);
+ } else {
+ result = value;
+ }
+
+ return (result);
+}
+
+/**
+ \brief Unsigned Saturate for internal use
+ \details Saturates an unsigned value, should not call directly.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (0..31)
+ \return Saturated value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __IUSAT(uint32_t value, uint32_t sat)
+{
+ uint32_t result;
+
+ if (value & 0x80000000) { /* only overflow set bit-31 */
+ result = 0;
+ } else if ((((0xFFFFFFFF >> sat) << sat) & value) != 0) {
+ result = 0xFFFFFFFF >> (32 - sat);
+ } else {
+ result = value;
+ }
+
+ return (result);
+}
+
+/**
+ \brief Rotate Right with Extend
+ \details This function moves each bit of a bitstring right by one bit.
+ The carry input is shifted in at the left end of the bitstring.
+ \note carry input will always 0.
+ \param [in] op1 Value to rotate
+ \return Rotated value
+ */
+__ALWAYS_STATIC_INLINE uint32_t __RRX(uint32_t op1)
+{
+ return 0;
+}
+
+/**
+ \brief LDRT Unprivileged (8 bit)
+ \details Executes a Unprivileged LDRT instruction for 8 bit value.
+ \param [in] addr Pointer to location
+ \return value of type uint8_t at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr)
+{
+ uint32_t result;
+
+ __ASM volatile("lb %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return ((uint8_t) result); /* Add explicit type cast here */
+}
+
+
+/**
+ \brief LDRT Unprivileged (16 bit)
+ \details Executes a Unprivileged LDRT instruction for 16 bit values.
+ \param [in] addr Pointer to location
+ \return value of type uint16_t at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr)
+{
+ uint32_t result;
+
+ __ASM volatile("lh %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return ((uint16_t) result); /* Add explicit type cast here */
+}
+
+
+/**
+ \brief LDRT Unprivileged (32 bit)
+ \details Executes a Unprivileged LDRT instruction for 32 bit values.
+ \param [in] addr Pointer to location
+ \return value of type uint32_t at (*ptr)
+ */
+__ALWAYS_STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr)
+{
+ uint32_t result;
+
+ __ASM volatile("lw %0, 0(%1)" : "=r"(result) : "r"(addr));
+
+ return (result);
+}
+
+
+/**
+ \brief STRT Unprivileged (8 bit)
+ \details Executes a Unprivileged STRT instruction for 8 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr)
+{
+ __ASM volatile("sb %1, 0(%0)" :: "r"(addr), "r"((uint32_t)value) : "memory");
+}
+
+
+/**
+ \brief STRT Unprivileged (16 bit)
+ \details Executes a Unprivileged STRT instruction for 16 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr)
+{
+ __ASM volatile("sh %1, 0(%0)" :: "r"(addr), "r"((uint32_t)value) : "memory");
+}
+
+
+/**
+ \brief STRT Unprivileged (32 bit)
+ \details Executes a Unprivileged STRT instruction for 32 bit values.
+ \param [in] value Value to store
+ \param [in] addr Pointer to location
+ */
+__ALWAYS_STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr)
+{
+ __ASM volatile("sw %1, 0(%0)" :: "r"(addr), "r"(value) : "memory");
+}
+
+/*@}*/ /* end of group CSI_Core_InstructionInterface */
+
+/* ################### Compiler specific Intrinsics ########################### */
+/** \defgroup CSI_SIMD_intrinsics CSI SIMD Intrinsics
+ Access to dedicated SIMD instructions \n
+ Single Instruction Multiple Data (SIMD) extensions are provided to simplify development of application software. SIMD extensions increase the processing capability without materially increasing the power consumption. The SIMD extensions are completely transparent to the operating system (OS), allowing existing OS ports to be used.
+
+ @{
+*/
+
+/**
+ \brief Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16]
+ of val2 levitated with the val3.
+ \details Combine a halfword from one register with a halfword from another register.
+ The second argument can be left-shifted before extraction of the halfword.
+ \param [in] val1 first 16-bit operands
+ \param [in] val2 second 16-bit operands
+ \param [in] val3 value for left-shifting val2. Value range [0..31].
+ \return the combination of halfwords.
+ \remark
+ res[15:0] = val1[15:0] \n
+ res[31:16] = val2[31:16] << val3
+ */
+__ALWAYS_STATIC_INLINE uint32_t __PKHBT(uint32_t val1, uint32_t val2, uint32_t val3)
+{
+ return ((((int32_t)(val1) << 0) & (int32_t)0x0000FFFF) | (((int32_t)(val2) << val3) & (int32_t)0xFFFF0000));
+}
+
+/**
+ \brief Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0]
+ of val2 right-shifted with the val3.
+ \details Combine a halfword from one register with a halfword from another register.
+ The second argument can be right-shifted before extraction of the halfword.
+ \param [in] val1 first 16-bit operands
+ \param [in] val2 second 16-bit operands
+ \param [in] val3 value for right-shifting val2. Value range [1..32].
+ \return the combination of halfwords.
+ \remark
+ res[15:0] = val2[15:0] >> val3 \n
+ res[31:16] = val1[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __PKHTB(uint32_t val1, uint32_t val2, uint32_t val3)
+{
+ return ((((int32_t)(val1) << 0) & (int32_t)0xFFFF0000) | (((int32_t)(val2) >> val3) & (int32_t)0x0000FFFF));
+}
+
+/**
+ \brief Dual 16-bit signed saturate.
+ \details This function saturates a signed value.
+ \param [in] x two signed 16-bit values to be saturated.
+ \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16.
+ \return the sum of the absolute differences of the following bytes, added to the accumulation value:\n
+ the signed saturation of the low halfword in val1, saturated to the bit position specified in
+ val2 and returned in the low halfword of the return value.\n
+ the signed saturation of the high halfword in val1, saturated to the bit position specified in
+ val2 and returned in the high halfword of the return value.
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SSAT16(int32_t x, const uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __SSAT((((int32_t)x << 16) >> 16), y) & (int32_t)0x0000FFFF;
+ s = __SSAT((((int32_t)x) >> 16), y) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturate.
+ \details This function enables you to saturate two signed 16-bit values to a selected unsigned range.
+ \param [in] x two signed 16-bit values to be saturated.
+ \param [in] y bit position for saturation, an integral constant expression in the range 1 to 16.
+ \return the saturation of the two signed 16-bit values, as non-negative values:
+ the saturation of the low halfword in val1, saturated to the bit position specified in
+ val2 and returned in the low halfword of the return value.\n
+ the saturation of the high halfword in val1, saturated to the bit position specified in
+ val2 and returned in the high halfword of the return value.
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USAT16(uint32_t x, const uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __IUSAT(((x << 16) >> 16), y) & 0x0000FFFF;
+ s = __IUSAT(((x) >> 16), y) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit saturating addition.
+ \details This function enables you to perform four 8-bit integer additions,
+ saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the saturated addition of the first byte of each operand in the first byte of the return value.\n
+ the saturated addition of the second byte of each operand in the second byte of the return value.\n
+ the saturated addition of the third byte of each operand in the third byte of the return value.\n
+ the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = __SSAT(((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;
+ s = __SSAT(((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;
+ t = __SSAT(((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;
+ u = __SSAT(((((int32_t)x) >> 24) + (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned saturating addition.
+ \details This function enables you to perform four unsigned 8-bit integer additions,
+ saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the saturated addition of the first byte of each operand in the first byte of the return value.\n
+ the saturated addition of the second byte of each operand in the second byte of the return value.\n
+ the saturated addition of the third byte of each operand in the third byte of the return value.\n
+ the saturated addition of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range 0 <= x <= 2^8 - 1.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = __IUSAT((((x << 24) >> 24) + ((y << 24) >> 24)), 8) & 0x000000FF;
+ s = __IUSAT((((x << 16) >> 24) + ((y << 16) >> 24)), 8) & 0x000000FF;
+ t = __IUSAT((((x << 8) >> 24) + ((y << 8) >> 24)), 8) & 0x000000FF;
+ u = __IUSAT((((x) >> 24) + ((y) >> 24)), 8) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition.
+ \details This function performs four 8-bit signed integer additions.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the addition of the first bytes from each operand, in the first byte of the return value.\n
+ the addition of the second bytes of each operand, in the second byte of the return value.\n
+ the addition of the third bytes of each operand, in the third byte of the return value.\n
+ the addition of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF;
+ s = ((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF;
+ t = ((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF;
+ u = ((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned addition.
+ \details This function performs four unsigned 8-bit integer additions.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the addition of the first bytes from each operand, in the first byte of the return value.\n
+ the addition of the second bytes of each operand, in the second byte of the return value.\n
+ the addition of the third bytes of each operand, in the third byte of the return value.\n
+ the addition of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] + val2[7:0] \n
+ res[15:8] = val1[15:8] + val2[15:8] \n
+ res[23:16] = val1[23:16] + val2[23:16] \n
+ res[31:24] = val1[31:24] + val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) + ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) + ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) + ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) + ((y) >> 24)) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit saturating subtract.
+ \details This function enables you to perform four 8-bit integer subtractions,
+ saturating the results to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the subtraction of the first byte of each operand in the first byte of the return value.\n
+ the subtraction of the second byte of each operand in the second byte of the return value.\n
+ the subtraction of the third byte of each operand in the third byte of the return value.\n
+ the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit signed integer range -2^7 <= x <= 2^7 - 1.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QSUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = __SSAT(((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;
+ s = __SSAT(((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;
+ t = __SSAT(((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;
+ u = __SSAT(((((int32_t)x) >> 24) - (((int32_t)y) >> 24)), 8) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned saturating subtraction.
+ \details This function enables you to perform four unsigned 8-bit integer subtractions,
+ saturating the results to the 8-bit unsigned integer range 0 < x < 2^8 - 1.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the subtraction of the first byte of each operand in the first byte of the return value.\n
+ the subtraction of the second byte of each operand in the second byte of the return value.\n
+ the subtraction of the third byte of each operand in the third byte of the return value.\n
+ the subtraction of the fourth byte of each operand in the fourth byte of the return value.\n
+ The returned results are saturated to the 8-bit unsigned integer range 0 <= x <= 2^8 - 1.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQSUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = __IUSAT((((x << 24) >> 24) - ((y << 24) >> 24)), 8) & 0x000000FF;
+ s = __IUSAT((((x << 16) >> 24) - ((y << 16) >> 24)), 8) & 0x000000FF;
+ t = __IUSAT((((x << 8) >> 24) - ((y << 8) >> 24)), 8) & 0x000000FF;
+ u = __IUSAT((((x) >> 24) - ((y) >> 24)), 8) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed subtraction.
+ \details This function enables you to perform four 8-bit signed integer subtractions.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SSUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) & (int32_t)0x000000FF;
+ s = ((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) & (int32_t)0x000000FF;
+ t = ((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) & (int32_t)0x000000FF;
+ u = ((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned subtract.
+ \details This function enables you to perform four 8-bit unsigned integer subtractions.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = val1[7:0] - val2[7:0] \n
+ res[15:8] = val1[15:8] - val2[15:8] \n
+ res[23:16] = val1[23:16] - val2[23:16] \n
+ res[31:24] = val1[31:24] - val2[31:24]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Unsigned sum of quad 8-bit unsigned absolute difference.
+ \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values
+ of the differences together, returning the result as a single unsigned integer.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \return the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.\n
+ The sum is returned as a single unsigned integer.
+ \remark
+ absdiff1 = val1[7:0] - val2[7:0] \n
+ absdiff2 = val1[15:8] - val2[15:8] \n
+ absdiff3 = val1[23:16] - val2[23:16] \n
+ absdiff4 = val1[31:24] - val2[31:24] \n
+ res[31:0] = absdiff1 + absdiff2 + absdiff3 + absdiff4
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USAD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = (((x << 24) >> 24) - ((y << 24) >> 24)) & 0x000000FF;
+ s = (((x << 16) >> 24) - ((y << 16) >> 24)) & 0x000000FF;
+ t = (((x << 8) >> 24) - ((y << 8) >> 24)) & 0x000000FF;
+ u = (((x) >> 24) - ((y) >> 24)) & 0x000000FF;
+
+ return (u + t + s + r);
+}
+
+/**
+ \brief Unsigned sum of quad 8-bit unsigned absolute difference with 32-bit accumulate.
+ \details This function enables you to perform four unsigned 8-bit subtractions, and add the absolute values
+ of the differences to a 32-bit accumulate operand.
+ \param [in] x first four 8-bit operands of each subtraction.
+ \param [in] y second four 8-bit operands of each subtraction.
+ \param [in] sum accumulation value.
+ \return the sum of the absolute differences of the following bytes, added to the accumulation value:
+ the subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the subtraction of the second bytes of each operand, in the second byte of the return value.\n
+ the subtraction of the third bytes of each operand, in the third byte of the return value.\n
+ the subtraction of the fourth bytes of each operand, in the fourth byte of the return value.
+ \remark
+ absdiff1 = val1[7:0] - val2[7:0] \n
+ absdiff2 = val1[15:8] - val2[15:8] \n
+ absdiff3 = val1[23:16] - val2[23:16] \n
+ absdiff4 = val1[31:24] - val2[31:24] \n
+ sum = absdiff1 + absdiff2 + absdiff3 + absdiff4 \n
+ res[31:0] = sum[31:0] + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USADA8(uint32_t x, uint32_t y, uint32_t sum)
+{
+ int32_t r, s, t, u;
+
+#ifdef __cplusplus
+ r = (abs((long long)((x << 24) >> 24) - ((y << 24) >> 24))) & 0x000000FF;
+ s = (abs((long long)((x << 16) >> 24) - ((y << 16) >> 24))) & 0x000000FF;
+ t = (abs((long long)((x << 8) >> 24) - ((y << 8) >> 24))) & 0x000000FF;
+ u = (abs((long long)((x) >> 24) - ((y) >> 24))) & 0x000000FF;
+#else
+ r = (abs(((x << 24) >> 24) - ((y << 24) >> 24))) & 0x000000FF;
+ s = (abs(((x << 16) >> 24) - ((y << 16) >> 24))) & 0x000000FF;
+ t = (abs(((x << 8) >> 24) - ((y << 8) >> 24))) & 0x000000FF;
+ u = (abs(((x) >> 24) - ((y) >> 24))) & 0x000000FF;
+#endif
+ return (u + t + s + r + sum);
+}
+
+/**
+ \brief Dual 16-bit saturating addition.
+ \details This function enables you to perform two 16-bit integer arithmetic additions in parallel,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated addition of the low halfwords, in the low halfword of the return value.\n
+ the saturated addition of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QADD16(uint32_t x, uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating addition.
+ \details This function enables you to perform two unsigned 16-bit integer additions, saturating
+ the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated addition of the low halfwords, in the low halfword of the return value.\n
+ the saturated addition of the high halfwords, in the high halfword of the return value.\n
+ The results are saturated to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQADD16(uint32_t x, uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = __IUSAT((((x << 16) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed addition.
+ \details This function enables you to perform two 16-bit signed integer additions.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the addition of the low halfwords in the low halfword of the return value.\n
+ the addition of the high halfwords in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SADD16(uint32_t x, uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = ((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition
+ \details This function enables you to perform two 16-bit unsigned integer additions.
+ \param [in] x first two 16-bit summands for each addition.
+ \param [in] y second two 16-bit summands for each addition.
+ \return the addition of the low halfwords in the low halfword of the return value.\n
+ the addition of the high halfwords in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] + val2[15:0] \n
+ res[31:16] = val1[31:16] + val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UADD16(uint32_t x, uint32_t y)
+{
+ int32_t r = 0, s = 0;
+
+ r = (((x << 16) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) + ((y) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+
+/**
+ \brief Dual 16-bit signed addition with halved results.
+ \details This function enables you to perform two signed 16-bit integer additions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved addition of the low halfwords, in the low halfword of the return value.\n
+ the halved addition of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHADD16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition with halved results.
+ \details This function enables you to perform two unsigned 16-bit integer additions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved addition of the low halfwords, in the low halfword of the return value.\n
+ the halved addition of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHADD16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition with halved results.
+ \details This function enables you to perform four signed 8-bit integer additions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n
+ the halved addition of the second bytes from each operand, in the second byte of the return value.\n
+ the halved addition of the third bytes from each operand, in the third byte of the return value.\n
+ the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = (((((int32_t)x << 24) >> 24) + (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF;
+ s = (((((int32_t)x << 16) >> 24) + (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF;
+ t = (((((int32_t)x << 8) >> 24) + (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF;
+ u = (((((int32_t)x) >> 24) + (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned addition with halved results.
+ \details This function enables you to perform four unsigned 8-bit integer additions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved addition of the first bytes from each operand, in the first byte of the return value.\n
+ the halved addition of the second bytes from each operand, in the second byte of the return value.\n
+ the halved addition of the third bytes from each operand, in the third byte of the return value.\n
+ the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] + val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] + val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] + val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] + val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHADD8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((x << 24) >> 24) + ((y << 24) >> 24)) >> 1) & 0x000000FF;
+ s = ((((x << 16) >> 24) + ((y << 16) >> 24)) >> 1) & 0x000000FF;
+ t = ((((x << 8) >> 24) + ((y << 8) >> 24)) >> 1) & 0x000000FF;
+ u = ((((x) >> 24) + ((y) >> 24)) >> 1) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Dual 16-bit saturating subtract.
+ \details This function enables you to perform two 16-bit integer subtractions in parallel,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n
+ the saturated subtraction of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QSUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating subtraction.
+ \details This function enables you to perform two unsigned 16-bit integer subtractions,
+ saturating the results to the 16-bit unsigned integer range 0 < x < 2^16 - 1.
+ \param [in] x first two 16-bit operands for each subtraction.
+ \param [in] y second two 16-bit operands for each subtraction.
+ \return the saturated subtraction of the low halfwords, in the low halfword of the return value.\n
+ the saturated subtraction of the high halfwords, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQSUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction.
+ \details This function enables you to perform two 16-bit signed integer subtractions.
+ \param [in] x first two 16-bit operands of each subtraction.
+ \param [in] y second two 16-bit operands of each subtraction.
+ \return the subtraction of the low halfword in the second operand from the low
+ halfword in the first operand, in the low halfword of the return value. \n
+ the subtraction of the high halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SSUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtract.
+ \details This function enables you to perform two 16-bit unsigned integer subtractions.
+ \param [in] x first two 16-bit operands of each subtraction.
+ \param [in] y second two 16-bit operands of each subtraction.
+ \return the subtraction of the low halfword in the second operand from the low
+ halfword in the first operand, in the low halfword of the return value. \n
+ the subtraction of the high halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[15:0] \n
+ res[31:16] = val1[31:16] - val2[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) - ((y) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction with halved results.
+ \details This function enables you to perform two signed 16-bit integer subtractions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n
+ the halved subtraction of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHSUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtraction with halved results.
+ \details This function enables you to perform two unsigned 16-bit integer subtractions, halving the results.
+ \param [in] x first two 16-bit summands.
+ \param [in] y second two 16-bit summands.
+ \return the halved subtraction of the low halfwords, in the low halfword of the return value.\n
+ the halved subtraction of the high halfwords, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[15:0]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[31:16]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHSUB16(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Quad 8-bit signed addition with halved results.
+ \details This function enables you to perform four signed 8-bit integer subtractions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n
+ the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n
+ the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] - val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHSUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = (((((int32_t)x << 24) >> 24) - (((int32_t)y << 24) >> 24)) >> 1) & (int32_t)0x000000FF;
+ s = (((((int32_t)x << 16) >> 24) - (((int32_t)y << 16) >> 24)) >> 1) & (int32_t)0x000000FF;
+ t = (((((int32_t)x << 8) >> 24) - (((int32_t)y << 8) >> 24)) >> 1) & (int32_t)0x000000FF;
+ u = (((((int32_t)x) >> 24) - (((int32_t)y) >> 24)) >> 1) & (int32_t)0x000000FF;
+
+ return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));
+}
+
+/**
+ \brief Quad 8-bit unsigned subtraction with halved results.
+ \details This function enables you to perform four unsigned 8-bit integer subtractions, halving the results.
+ \param [in] x first four 8-bit summands.
+ \param [in] y second four 8-bit summands.
+ \return the halved subtraction of the first bytes from each operand, in the first byte of the return value.\n
+ the halved subtraction of the second bytes from each operand, in the second byte of the return value.\n
+ the halved subtraction of the third bytes from each operand, in the third byte of the return value.\n
+ the halved subtraction of the fourth bytes from each operand, in the fourth byte of the return value.
+ \remark
+ res[7:0] = (val1[7:0] - val2[7:0] ) >> 1 \n
+ res[15:8] = (val1[15:8] - val2[15:8] ) >> 1 \n
+ res[23:16] = (val1[23:16] - val2[23:16]) >> 1 \n
+ res[31:24] = (val1[31:24] - val2[31:24]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHSUB8(uint32_t x, uint32_t y)
+{
+ int32_t r, s, t, u;
+
+ r = ((((x << 24) >> 24) - ((y << 24) >> 24)) >> 1) & 0x000000FF;
+ s = ((((x << 16) >> 24) - ((y << 16) >> 24)) >> 1) & 0x000000FF;
+ t = ((((x << 8) >> 24) - ((y << 8) >> 24)) >> 1) & 0x000000FF;
+ u = ((((x) >> 24) - ((y) >> 24)) >> 1) & 0x000000FF;
+
+ return ((u << 24) | (t << 16) | (s << 8) | (r));
+}
+
+/**
+ \brief Dual 16-bit add and subtract with exchange.
+ \details This function enables you to exchange the halfwords of the one operand,
+ then add the high halfwords and subtract the low halfwords,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the saturated subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the saturated addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating addition and subtraction with exchange.
+ \details This function enables you to exchange the halfwords of the second operand and
+ perform one unsigned 16-bit integer addition and one unsigned 16-bit subtraction,
+ saturating the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the saturated subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the saturated addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) - ((y) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) + ((y << 16) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit addition and subtraction with exchange.
+ \details It enables you to exchange the halfwords of the second operand, add the high halfwords
+ and subtract the low halfwords.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition and subtraction with exchange.
+ \details This function enables you to exchange the two halfwords of the second operand,
+ add the high halfwords and subtract the low halfwords.
+ \param [in] x first operand for the subtraction in the low halfword,
+ and the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword,
+ and the second operand for the addition in the low halfword.
+ \return the subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the addition of the high halfword in the first operand and the
+ low halfword in the second operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = val1[15:0] - val2[31:16] \n
+ res[31:16] = val1[31:16] + val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) - ((y) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) + ((y << 16) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed addition and subtraction with halved results.
+ \details This function enables you to exchange the two halfwords of one operand, perform one
+ signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results.
+ \param [in] x first 16-bit operands.
+ \param [in] y second 16-bit operands.
+ \return the halved subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the halved addition of the low halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) - (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) + (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned addition and subtraction with halved results and exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ add the high halfwords and subtract the low halfwords, halving the results.
+ \param [in] x first operand for the subtraction in the low halfword, and
+ the first operand for the addition in the high halfword.
+ \param [in] y second operand for the subtraction in the high halfword, and
+ the second operand for the addition in the low halfword.
+ \return the halved subtraction of the high halfword in the second operand from the
+ low halfword in the first operand, in the low halfword of the return value.\n
+ the halved addition of the low halfword in the second operand from the high
+ halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] - val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] + val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHASX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) - ((y) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) + ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit subtract and add with exchange.
+ \details This function enables you to exchange the halfwords of one operand,
+ then subtract the high halfwords and add the low halfwords,
+ saturating the results to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the saturated addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the saturated subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit signed integer range -2^15 <= x <= 2^15 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __QSAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __SSAT(((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;
+ s = __SSAT(((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned saturating subtraction and addition with exchange.
+ \details This function enables you to exchange the halfwords of the second operand and perform
+ one unsigned 16-bit integer subtraction and one unsigned 16-bit addition, saturating
+ the results to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the saturated addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the saturated subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ The returned results are saturated to the 16-bit unsigned integer range 0 <= x <= 2^16 - 1.
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UQSAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = __IUSAT((((x << 16) >> 16) + ((y) >> 16)), 16) & 0x0000FFFF;
+ s = __IUSAT((((x) >> 16) - ((y << 16) >> 16)), 16) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtract and add with exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ subtract the high halfwords and add the low halfwords.
+ \param [in] x first operand for the addition in the low halfword,
+ and the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword,
+ and the second operand for the subtraction in the low halfword.
+ \return the addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __USAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((x << 16) >> 16) + ((y) >> 16)) & 0x0000FFFF;
+ s = (((x) >> 16) - ((y << 16) >> 16)) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed subtraction and addition with exchange.
+ \details This function enables you to exchange the two halfwords of one operand and perform one
+ 16-bit integer subtraction and one 16-bit addition.
+ \param [in] x first operand for the addition in the low halfword, and the first operand
+ for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword, and the second
+ operand for the subtraction in the low halfword.
+ \return the addition of the low halfword of the first operand and the high
+ halfword of the second operand, in the low halfword of the return value.\n
+ the subtraction of the low halfword of the second operand from the
+ high halfword of the first operand, in the high halfword of the return value.\n
+ \remark
+ res[15:0] = val1[15:0] + val2[31:16] \n
+ res[31:16] = val1[31:16] - val2[15:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SSAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) & (int32_t)0x0000FFFF;
+ s = ((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+
+/**
+ \brief Dual 16-bit signed subtraction and addition with halved results.
+ \details This function enables you to exchange the two halfwords of one operand, perform one signed
+ 16-bit integer subtraction and one signed 16-bit addition, and halve the results.
+ \param [in] x first 16-bit operands.
+ \param [in] y second 16-bit operands.
+ \return the halved addition of the low halfword in the first operand and the
+ high halfword in the second operand, in the low halfword of the return value.\n
+ the halved subtraction of the low halfword in the second operand from the
+ high halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SHSAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = (((((int32_t)x << 16) >> 16) + (((int32_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+ s = (((((int32_t)x) >> 16) - (((int32_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;
+
+ return ((uint32_t)((s << 16) | (r)));
+}
+
+/**
+ \brief Dual 16-bit unsigned subtraction and addition with halved results and exchange.
+ \details This function enables you to exchange the halfwords of the second operand,
+ subtract the high halfwords and add the low halfwords, halving the results.
+ \param [in] x first operand for the addition in the low halfword, and
+ the first operand for the subtraction in the high halfword.
+ \param [in] y second operand for the addition in the high halfword, and
+ the second operand for the subtraction in the low halfword.
+ \return the halved addition of the low halfword in the first operand and the
+ high halfword in the second operand, in the low halfword of the return value.\n
+ the halved subtraction of the low halfword in the second operand from the
+ high halfword in the first operand, in the high halfword of the return value.
+ \remark
+ res[15:0] = (val1[15:0] + val2[31:16]) >> 1 \n
+ res[31:16] = (val1[31:16] - val2[15:0]) >> 1
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UHSAX(uint32_t x, uint32_t y)
+{
+ int32_t r, s;
+
+ r = ((((x << 16) >> 16) + ((y) >> 16)) >> 1) & 0x0000FFFF;
+ s = ((((x) >> 16) - ((y << 16) >> 16)) >> 1) & 0x0000FFFF;
+
+ return ((s << 16) | (r));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange returning difference.
+ \details This function enables you to perform two 16-bit signed multiplications, subtracting
+ one of the products from the other. The halfwords of the second operand are exchanged
+ before performing the arithmetic. This produces top * bottom and bottom * top multiplication.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the difference of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 - p2
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMUSDX(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16))));
+}
+
+/**
+ \brief Sum of dual 16-bit signed multiply with exchange.
+ \details This function enables you to perform two 16-bit signed multiplications with exchanged
+ halfwords of the second operand, adding the products together.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the sum of the products of the two 16-bit signed multiplications with exchanged halfwords of the second operand.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 + p2
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMUADX(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16))));
+}
+
+
+/**
+ \brief Saturating add.
+ \details This function enables you to obtain the saturating add of two integers.
+ \param [in] x first summand of the saturating add operation.
+ \param [in] y second summand of the saturating add operation.
+ \return the saturating addition of val1 and val2.
+ \remark
+ res[31:0] = SAT(val1 + SAT(val2))
+ */
+__ALWAYS_STATIC_INLINE int32_t __QADD(int32_t x, int32_t y)
+{
+ int32_t result;
+
+ if (y >= 0) {
+ if ((int32_t)((uint32_t)x + (uint32_t)y) >= x) {
+ result = x + y;
+ } else {
+ result = 0x7FFFFFFF;
+ }
+ } else {
+ if ((int32_t)((uint32_t)x + (uint32_t)y) < x) {
+ result = x + y;
+ } else {
+ result = 0x80000000;
+ }
+ }
+
+ return result;
+}
+
+/**
+ \brief Saturating subtract.
+ \details This function enables you to obtain the saturating add of two integers.
+ \param [in] x first summand of the saturating add operation.
+ \param [in] y second summand of the saturating add operation.
+ \return the saturating addition of val1 and val2.
+ \remark
+ res[31:0] = SAT(val1 - SAT(val2))
+ */
+__ALWAYS_STATIC_INLINE int32_t __QSUB(int32_t x, int32_t y)
+{
+ long tmp;
+ int32_t result;
+
+ tmp = (long)x - (long)y;
+
+ if (tmp > 0x7fffffff) {
+ tmp = 0x7fffffff;
+ } else if (tmp < (-2147483647 - 1)) {
+ tmp = -2147483647 - 1;
+ }
+
+ result = tmp;
+ return result;
+}
+
+/**
+ \brief Dual 16-bit signed multiply with single 32-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications,
+ adding both results to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value, as a 32-bit integer.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 + p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMLAD(uint32_t x, uint32_t y, uint32_t sum)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications with exchanged
+ halfwords of the second operand, adding both results to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication with exchanged halfwords of the second
+ operand added to the accumulate value, as a 32-bit integer.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 + p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMLADX(uint32_t x, uint32_t y, uint32_t sum)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.
+ \details This function enables you to perform two 16-bit signed multiplications, take the
+ difference of the products, subtracting the high halfword product from the low
+ halfword product, and add the difference to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 - p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMLSD(uint32_t x, uint32_t y, uint32_t sum)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.
+ \details This function enables you to exchange the halfwords in the second operand, then perform two 16-bit
+ signed multiplications. The difference of the products is added to a 32-bit accumulate operand.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[31:0] = p1 - p2 + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMLSDX(uint32_t x, uint32_t y, uint32_t sum)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((int32_t)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with single 64-bit accumulator.
+ \details This function enables you to perform two signed 16-bit multiplications, adding both results
+ to a 64-bit accumulate operand. Overflow is only possible as a result of the 64-bit addition.
+ This overflow is not detected if it occurs. Instead, the result wraps around modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ sum = p1 + p2 + val3[63:32][31:0] \n
+ res[63:32] = sum[63:32] \n
+ res[31:0] = sum[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLALD(uint32_t x, uint32_t y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((unsigned long)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange with single 64-bit accumulator.
+ \details This function enables you to exchange the halfwords of the second operand, and perform two
+ signed 16-bit multiplications, adding both results to a 64-bit accumulate operand. Overflow
+ is only possible as a result of the 64-bit addition. This overflow is not detected if it occurs.
+ Instead, the result wraps around modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the product of each multiplication added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ sum = p1 + p2 + val3[63:32][31:0] \n
+ res[63:32] = sum[63:32] \n
+ res[31:0] = sum[31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLALDX(uint32_t x, uint32_t y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((unsigned long)sum))));
+}
+
+/**
+ \brief dual 16-bit signed multiply subtract with 64-bit accumulate.
+ \details This function It enables you to perform two 16-bit signed multiplications, take the difference
+ of the products, subtracting the high halfword product from the low halfword product, and add the
+ difference to a 64-bit accumulate operand. Overflow cannot occur during the multiplications or the
+ subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow is not
+ detected. Instead, the result wraps round to modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[63:32][31:0] = p1 - p2 + val3[63:32][31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLSLD(uint32_t x, uint32_t y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16)) +
+ (((unsigned long)sum))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply with exchange subtract with 64-bit accumulate.
+ \details This function enables you to exchange the halfwords of the second operand, perform two 16-bit multiplications,
+ adding the difference of the products to a 64-bit accumulate operand. Overflow cannot occur during the
+ multiplications or the subtraction. Overflow can occur as a result of the 64-bit addition, and this overflow
+ is not detected. Instead, the result wraps round to modulo2^64.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \param [in] sum accumulate value.
+ \return the difference of the product of each multiplication, added to the accumulate value.
+ \remark
+ p1 = val1[15:0] * val2[31:16] \n
+ p2 = val1[31:16] * val2[15:0] \n
+ res[63:32][31:0] = p1 - p2 + val3[63:32][31:0]
+ */
+__ALWAYS_STATIC_INLINE unsigned long __SMLSLDX(uint32_t x, uint32_t y, unsigned long sum)
+{
+ return ((unsigned long)(((((int32_t)x << 16) >> 16) * (((int32_t)y) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y << 16) >> 16)) +
+ (((unsigned long)sum))));
+}
+
+/**
+ \brief 32-bit signed multiply with 32-bit truncated accumulator.
+ \details This function enables you to perform a signed 32-bit multiplications, adding the most
+ significant 32 bits of the 64-bit result to a 32-bit accumulate operand.
+ \param [in] x first operand for multiplication.
+ \param [in] y second operand for multiplication.
+ \param [in] sum accumulate value.
+ \return the product of multiplication (most significant 32 bits) is added to the accumulate value, as a 32-bit integer.
+ \remark
+ p = val1 * val2 \n
+ res[31:0] = p[63:32] + val3[31:0]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMMLA(int32_t x, int32_t y, int32_t sum)
+{
+ return (uint32_t)((int32_t)((long)((long)x * (long)y) >> 32) + sum);
+}
+
+/**
+ \brief Sum of dual 16-bit signed multiply.
+ \details This function enables you to perform two 16-bit signed multiplications, adding the products together.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the sum of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 + p2
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMUAD(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) +
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16))));
+}
+
+/**
+ \brief Dual 16-bit signed multiply returning difference.
+ \details This function enables you to perform two 16-bit signed multiplications, taking the difference
+ of the products by subtracting the high halfword product from the low halfword product.
+ \param [in] x first 16-bit operands for each multiplication.
+ \param [in] y second 16-bit operands for each multiplication.
+ \return the difference of the products of the two 16-bit signed multiplications.
+ \remark
+ p1 = val1[15:0] * val2[15:0] \n
+ p2 = val1[31:16] * val2[31:16] \n
+ res[31:0] = p1 - p2
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SMUSD(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)(((((int32_t)x << 16) >> 16) * (((int32_t)y << 16) >> 16)) -
+ ((((int32_t)x) >> 16) * (((int32_t)y) >> 16))));
+}
+
+/**
+ \brief Dual extracted 8-bit to 16-bit signed addition.
+ \details This function enables you to extract two 8-bit values from the second operand (at bit positions
+ [7:0] and [23:16]), sign-extend them to 16-bits each, and add the results to the first operand.
+ \param [in] x values added to the sign-extended to 16-bit values.
+ \param [in] y two 8-bit values to be extracted and sign-extended.
+ \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and
+ val2[23:16] have been extracted and sign-extended prior to the addition.
+ \remark
+ res[15:0] = val1[15:0] + SignExtended(val2[7:0]) \n
+ res[31:16] = val1[31:16] + SignExtended(val2[23:16])
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SXTAB16(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)((((((int32_t)y << 24) >> 24) + (((int32_t)x << 16) >> 16)) & (int32_t)0x0000FFFF) |
+ (((((int32_t)y << 8) >> 8) + (((int32_t)x >> 16) << 16)) & (int32_t)0xFFFF0000)));
+}
+
+/**
+ \brief Extracted 16-bit to 32-bit unsigned addition.
+ \details This function enables you to extract two 8-bit values from one operand, zero-extend
+ them to 16 bits each, and add the results to two 16-bit values from another operand.
+ \param [in] x values added to the zero-extended to 16-bit values.
+ \param [in] y two 8-bit values to be extracted and zero-extended.
+ \return the addition of val1 and val2, where the 8-bit values in val2[7:0] and
+ val2[23:16] have been extracted and zero-extended prior to the addition.
+ \remark
+ res[15:0] = ZeroExt(val2[7:0] to 16 bits) + val1[15:0] \n
+ res[31:16] = ZeroExt(val2[31:16] to 16 bits) + val1[31:16]
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UXTAB16(uint32_t x, uint32_t y)
+{
+ return ((uint32_t)(((((y << 24) >> 24) + ((x << 16) >> 16)) & 0x0000FFFF) |
+ ((((y << 8) >> 8) + ((x >> 16) << 16)) & 0xFFFF0000)));
+}
+
+/**
+ \brief Dual extract 8-bits and sign extend each to 16-bits.
+ \details This function enables you to extract two 8-bit values from an operand and sign-extend them to 16 bits each.
+ \param [in] x two 8-bit values in val[7:0] and val[23:16] to be sign-extended.
+ \return the 8-bit values sign-extended to 16-bit values.\n
+ sign-extended value of val[7:0] in the low halfword of the return value.\n
+ sign-extended value of val[23:16] in the high halfword of the return value.
+ \remark
+ res[15:0] = SignExtended(val[7:0]) \n
+ res[31:16] = SignExtended(val[23:16])
+ */
+__ALWAYS_STATIC_INLINE uint32_t __SXTB16(uint32_t x)
+{
+ return ((uint32_t)(((((int32_t)x << 24) >> 24) & (int32_t)0x0000FFFF) |
+ ((((int32_t)x << 8) >> 8) & (int32_t)0xFFFF0000)));
+}
+
+/**
+ \brief Dual extract 8-bits and zero-extend to 16-bits.
+ \details This function enables you to extract two 8-bit values from an operand and zero-extend them to 16 bits each.
+ \param [in] x two 8-bit values in val[7:0] and val[23:16] to be zero-extended.
+ \return the 8-bit values sign-extended to 16-bit values.\n
+ sign-extended value of val[7:0] in the low halfword of the return value.\n
+ sign-extended value of val[23:16] in the high halfword of the return value.
+ \remark
+ res[15:0] = SignExtended(val[7:0]) \n
+ res[31:16] = SignExtended(val[23:16])
+ */
+__ALWAYS_STATIC_INLINE uint32_t __UXTB16(uint32_t x)
+{
+ return ((uint32_t)((((x << 24) >> 24) & 0x0000FFFF) |
+ (((x << 8) >> 8) & 0xFFFF0000)));
+}
+#endif
+
+#endif /* _CSI_RV32_GCC_H_ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_common.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_common.h
new file mode 100644
index 000000000..4a57b718b
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_common.h
@@ -0,0 +1,126 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CSI_RV_COMMON_H__
+#define __CSI_RV_COMMON_H__
+
+#include
+#include
+
+#ifndef __ASM
+#define __ASM __asm /*!< asm keyword for GNU Compiler */
+#endif
+
+#ifndef __INLINE
+#define __INLINE inline /*!< inline keyword for GNU Compiler */
+#endif
+
+#ifndef __ALWAYS_STATIC_INLINE
+#define __ALWAYS_STATIC_INLINE __attribute__((always_inline)) static inline
+#endif
+
+#ifndef __STATIC_INLINE
+#define __STATIC_INLINE static inline
+#endif
+
+#ifndef __NO_RETURN
+#define __NO_RETURN __attribute__((__noreturn__))
+#endif
+
+#ifndef __USED
+#define __USED __attribute__((used))
+#endif
+
+#ifndef __WEAK
+#define __WEAK __attribute__((weak))
+#endif
+
+#ifndef __PACKED
+#define __PACKED __attribute__((packed, aligned(1)))
+#endif
+
+#ifndef __PACKED_STRUCT
+#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
+#endif
+
+#ifndef __PACKED_UNION
+#define __PACKED_UNION union __attribute__((packed, aligned(1)))
+#endif
+
+#ifdef __ASSEMBLY__
+#define __ASM_STR(x) x
+#else
+#define __ASM_STR(x) #x
+#endif
+
+#ifndef __ASSEMBLY__
+#define rv_csr_read(csr) \
+ ({ \
+ register unsigned long __v; \
+ __asm__ __volatile__("csrr %0, " __ASM_STR(csr) \
+ : "=r"(__v) \
+ : \
+ : "memory"); \
+ __v; \
+ })
+
+#define rv_csr_write(csr, val) \
+ ({ \
+ unsigned long __v = (unsigned long)(val); \
+ __asm__ __volatile__("csrw " __ASM_STR(csr) ", %0" \
+ : \
+ : "rK"(__v) \
+ : "memory"); \
+ })
+
+#define rv_csr_read_set(csr, val) \
+ ({ \
+ unsigned long __v = (unsigned long)(val); \
+ __asm__ __volatile__("csrrs %0, " __ASM_STR(csr) ", %1" \
+ : "=r"(__v) : "rK"(__v) \
+ : "memory"); \
+ __v; \
+ })
+
+#define rv_csr_set(csr, val) \
+ ({ \
+ unsigned long __v = (unsigned long)(val); \
+ __asm__ __volatile__("csrs " __ASM_STR(csr) ", %0" \
+ : : "rK"(__v) \
+ : "memory"); \
+ })
+
+#define rv_csr_read_clear(csr, val) \
+ ({ \
+ unsigned long __v = (unsigned long)(val); \
+ __asm__ __volatile__("csrrc %0, " __ASM_STR(csr) ", %1" \
+ : "=r"(__v) : "rK"(__v) \
+ : "memory"); \
+ __v; \
+ })
+
+#define rv_csr_clear(csr, val) \
+ ({ \
+ unsigned long __v = (unsigned long)(val); \
+ __asm__ __volatile__("csrc " __ASM_STR(csr) ", %0" \
+ : : "rK"(__v) \
+ : "memory"); \
+ })
+#endif
+
+#endif /* __CSI_RV_COMMON_H__ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_encoding.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_encoding.h
new file mode 100644
index 000000000..82df61a9d
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/core/csi_rv_encoding.h
@@ -0,0 +1,716 @@
+/*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CSI_RV_ENCODING_H__
+#define __CSI_RV_ENCODING_H__
+
+/* ===== User-level CSRs ===== */
+
+/* User Trap Setup (N-extension) */
+#define CSR_USTATUS 0x000
+#define CSR_UIE 0x004
+#define CSR_UTVEC 0x005
+
+/* User Trap Handling (N-extension) */
+#define CSR_USCRATCH 0x040
+#define CSR_UEPC 0x041
+#define CSR_UCAUSE 0x042
+#define CSR_UTVAL 0x043
+#define CSR_UIP 0x044
+
+/* User Floating-point CSRs */
+#define CSR_FFLAGS 0x001
+#define CSR_FRM 0x002
+#define CSR_FCSR 0x003
+
+/* User Vector CSRs */
+#define CSR_VSTART 0x008
+#define CSR_VXSAT 0x009
+#define CSR_VXRM 0x00A
+#define CSR_VCSR 0x00F
+#define CSR_VL 0xC20
+#define CSR_VTYPE 0xC21
+#define CSR_VLENB 0xC22
+
+/* User Counters/Timers */
+#define CSR_CYCLE 0xc00
+#define CSR_TIME 0xc01
+#define CSR_INSTRET 0xc02
+#define CSR_HPMCOUNTER3 0xc03
+#define CSR_HPMCOUNTER4 0xc04
+#define CSR_HPMCOUNTER5 0xc05
+#define CSR_HPMCOUNTER6 0xc06
+#define CSR_HPMCOUNTER7 0xc07
+#define CSR_HPMCOUNTER8 0xc08
+#define CSR_HPMCOUNTER9 0xc09
+#define CSR_HPMCOUNTER10 0xc0a
+#define CSR_HPMCOUNTER11 0xc0b
+#define CSR_HPMCOUNTER12 0xc0c
+#define CSR_HPMCOUNTER13 0xc0d
+#define CSR_HPMCOUNTER14 0xc0e
+#define CSR_HPMCOUNTER15 0xc0f
+#define CSR_HPMCOUNTER16 0xc10
+#define CSR_HPMCOUNTER17 0xc11
+#define CSR_HPMCOUNTER18 0xc12
+#define CSR_HPMCOUNTER19 0xc13
+#define CSR_HPMCOUNTER20 0xc14
+#define CSR_HPMCOUNTER21 0xc15
+#define CSR_HPMCOUNTER22 0xc16
+#define CSR_HPMCOUNTER23 0xc17
+#define CSR_HPMCOUNTER24 0xc18
+#define CSR_HPMCOUNTER25 0xc19
+#define CSR_HPMCOUNTER26 0xc1a
+#define CSR_HPMCOUNTER27 0xc1b
+#define CSR_HPMCOUNTER28 0xc1c
+#define CSR_HPMCOUNTER29 0xc1d
+#define CSR_HPMCOUNTER30 0xc1e
+#define CSR_HPMCOUNTER31 0xc1f
+#define CSR_CYCLEH 0xc80
+#define CSR_TIMEH 0xc81
+#define CSR_INSTRETH 0xc82
+#define CSR_HPMCOUNTER3H 0xc83
+#define CSR_HPMCOUNTER4H 0xc84
+#define CSR_HPMCOUNTER5H 0xc85
+#define CSR_HPMCOUNTER6H 0xc86
+#define CSR_HPMCOUNTER7H 0xc87
+#define CSR_HPMCOUNTER8H 0xc88
+#define CSR_HPMCOUNTER9H 0xc89
+#define CSR_HPMCOUNTER10H 0xc8a
+#define CSR_HPMCOUNTER11H 0xc8b
+#define CSR_HPMCOUNTER12H 0xc8c
+#define CSR_HPMCOUNTER13H 0xc8d
+#define CSR_HPMCOUNTER14H 0xc8e
+#define CSR_HPMCOUNTER15H 0xc8f
+#define CSR_HPMCOUNTER16H 0xc90
+#define CSR_HPMCOUNTER17H 0xc91
+#define CSR_HPMCOUNTER18H 0xc92
+#define CSR_HPMCOUNTER19H 0xc93
+#define CSR_HPMCOUNTER20H 0xc94
+#define CSR_HPMCOUNTER21H 0xc95
+#define CSR_HPMCOUNTER22H 0xc96
+#define CSR_HPMCOUNTER23H 0xc97
+#define CSR_HPMCOUNTER24H 0xc98
+#define CSR_HPMCOUNTER25H 0xc99
+#define CSR_HPMCOUNTER26H 0xc9a
+#define CSR_HPMCOUNTER27H 0xc9b
+#define CSR_HPMCOUNTER28H 0xc9c
+#define CSR_HPMCOUNTER29H 0xc9d
+#define CSR_HPMCOUNTER30H 0xc9e
+#define CSR_HPMCOUNTER31H 0xc9f
+
+/* ===== Supervisor-level CSRs ===== */
+
+/* Supervisor Trap Setup */
+#define CSR_SSTATUS 0x100
+#define CSR_SIE 0x104
+#define CSR_STVEC 0x105
+#define CSR_SCOUNTEREN 0x106
+
+/* Supervisor Counter Overflow CSR */
+#define CSR_SCOUNTOVF 0xda0
+
+/* Supervisor Configuration */
+#define CSR_SENVCFG 0x10a
+
+/* Supervisor Trap Handling */
+#define CSR_SSCRATCH 0x140
+#define CSR_SEPC 0x141
+#define CSR_SCAUSE 0x142
+#define CSR_STVAL 0x143
+#define CSR_SIP 0x144
+
+/* Supervisor CLIC CSRs */
+#define CSR_STVT 0x107
+#define CSR_SNXTI 0x145
+#define CSR_SINTSTATUS 0xDB1
+#define CSR_SINTTHRESH 0x147
+#define CSR_SSCRATCHCSW 0x148
+#define CSR_SSCRATCHCSWL 0x149
+
+/* Sstc extension */
+#define CSR_STIMECMP 0x14D
+#define CSR_STIMECMPH 0x15D
+
+/* Supervisor Protection and Translation */
+#define CSR_SATP 0x180
+
+/* Supervisor Debug/Trace */
+#define CSR_SCONTEXT 0x5a8
+
+/* Supervisor-Level Window to Indirectly Accessed Registers (AIA) */
+#define CSR_SISELECT 0x150
+#define CSR_SIREG 0x151
+#define CSR_SIREG2 0x152
+#define CSR_SIREG3 0x153
+#define CSR_SIREG4 0x155
+#define CSR_SIREG5 0x156
+#define CSR_SIREG6 0x157
+
+/* Supervisor-Level Interrupts (AIA) */
+#define CSR_STOPEI 0x15c
+#define CSR_STOPI 0xdb0
+
+/* Supervisor-Level High-Half CSRs (AIA) */
+#define CSR_SIEH 0x114
+#define CSR_SIPH 0x154
+
+/* Supervisor stateen CSRs */
+#define CSR_SSTATEEN0 0x10C
+#define CSR_SSTATEEN1 0x10D
+#define CSR_SSTATEEN2 0x10E
+#define CSR_SSTATEEN3 0x10F
+
+/* ===== Hypervisor-level CSRs ===== */
+
+/* Hypervisor Trap Setup (H-extension) */
+#define CSR_HSTATUS 0x600
+#define CSR_HEDELEG 0x602
+#define CSR_HIDELEG 0x603
+#define CSR_HIE 0x604
+#define CSR_HCOUNTEREN 0x606
+#define CSR_HGEIE 0x607
+
+/* Hypervisor Configuration */
+#define CSR_HENVCFG 0x60a
+#define CSR_HENVCFGH 0x61a
+
+/* Hypervisor Trap Handling (H-extension) */
+#define CSR_HTVAL 0x643
+#define CSR_HIP 0x644
+#define CSR_HVIP 0x645
+#define CSR_HTINST 0x64a
+#define CSR_HGEIP 0xe12
+
+/* Hypervisor Protection and Translation (H-extension) */
+#define CSR_HGATP 0x680
+
+/* Hypervisor Counter/Timer Virtualization Registers (H-extension) */
+#define CSR_HTIMEDELTA 0x605
+#define CSR_HTIMEDELTAH 0x615
+
+/* Virtual Supervisor Registers (H-extension) */
+#define CSR_VSSTATUS 0x200
+#define CSR_VSIE 0x204
+#define CSR_VSTVEC 0x205
+#define CSR_VSSCRATCH 0x240
+#define CSR_VSEPC 0x241
+#define CSR_VSCAUSE 0x242
+#define CSR_VSTVAL 0x243
+#define CSR_VSIP 0x244
+#define CSR_VSATP 0x280
+
+/* Virtual Interrupts and Interrupt Priorities (H-extension with AIA) */
+#define CSR_HVIEN 0x608
+#define CSR_HVICTL 0x609
+#define CSR_HVIPRIO1 0x646
+#define CSR_HVIPRIO2 0x647
+
+/* VS-Level Window to Indirectly Accessed Registers (H-extension with AIA) */
+#define CSR_VSISELECT 0x250
+#define CSR_VSIREG 0x251
+
+/* VS-Level Interrupts (H-extension with AIA) */
+#define CSR_VSTOPEI 0x25c
+#define CSR_VSTOPI 0xeb0
+
+/* Hypervisor and VS-Level High-Half CSRs (H-extension with AIA) */
+#define CSR_HIDELEGH 0x613
+#define CSR_HVIENH 0x618
+#define CSR_HVIPH 0x655
+#define CSR_HVIPRIO1H 0x656
+#define CSR_HVIPRIO2H 0x657
+#define CSR_VSIEH 0x214
+#define CSR_VSIPH 0x254
+
+/* Hypervisor stateen CSRs */
+#define CSR_HSTATEEN0 0x60C
+#define CSR_HSTATEEN0H 0x61C
+#define CSR_HSTATEEN1 0x60D
+#define CSR_HSTATEEN1H 0x61D
+#define CSR_HSTATEEN2 0x60E
+#define CSR_HSTATEEN2H 0x61E
+#define CSR_HSTATEEN3 0x60F
+#define CSR_HSTATEEN3H 0x61F
+
+/* ===== Machine-level CSRs ===== */
+
+/* Machine Information Registers */
+#define CSR_MVENDORID 0xf11
+#define CSR_MARCHID 0xf12
+#define CSR_MIMPID 0xf13
+#define CSR_MHARTID 0xf14
+#define CSR_MCONFIGPTR 0xf15
+
+/* Machine Trap Setup */
+#define CSR_MSTATUS 0x300
+#define CSR_MISA 0x301
+#define CSR_MEDELEG 0x302
+#define CSR_MIDELEG 0x303
+#define CSR_MIE 0x304
+#define CSR_MTVEC 0x305
+#define CSR_MCOUNTEREN 0x306
+#define CSR_MSTATUSH 0x310
+
+/* Machine Configuration */
+#define CSR_MENVCFG 0x30a
+#define CSR_MENVCFGH 0x31a
+
+/* Machine Trap Handling */
+#define CSR_MSCRATCH 0x340
+#define CSR_MEPC 0x341
+#define CSR_MCAUSE 0x342
+#define CSR_MTVAL 0x343
+#define CSR_MIP 0x344
+#define CSR_MTINST 0x34a
+#define CSR_MTVAL2 0x34b
+
+/* Machine CLIC CSRs */
+#define CSR_MTVT 0x307
+#define CSR_MNXTI 0x345
+#define CSR_MINTSTATUS 0xFB1
+#define CSR_MINTTHRESH 0x347
+#define CSR_MSCRATCHCSW 0x348
+#define CSR_MSCRATCHCSWL 0x349
+
+/* Machine Memory Protection */
+#define CSR_PMPCFG0 0x3a0
+#define CSR_PMPCFG1 0x3a1
+#define CSR_PMPCFG2 0x3a2
+#define CSR_PMPCFG3 0x3a3
+#define CSR_PMPCFG4 0x3a4
+#define CSR_PMPCFG5 0x3a5
+#define CSR_PMPCFG6 0x3a6
+#define CSR_PMPCFG7 0x3a7
+#define CSR_PMPCFG8 0x3a8
+#define CSR_PMPCFG9 0x3a9
+#define CSR_PMPCFG10 0x3aa
+#define CSR_PMPCFG11 0x3ab
+#define CSR_PMPCFG12 0x3ac
+#define CSR_PMPCFG13 0x3ad
+#define CSR_PMPCFG14 0x3ae
+#define CSR_PMPCFG15 0x3af
+#define CSR_PMPADDR0 0x3b0
+#define CSR_PMPADDR1 0x3b1
+#define CSR_PMPADDR2 0x3b2
+#define CSR_PMPADDR3 0x3b3
+#define CSR_PMPADDR4 0x3b4
+#define CSR_PMPADDR5 0x3b5
+#define CSR_PMPADDR6 0x3b6
+#define CSR_PMPADDR7 0x3b7
+#define CSR_PMPADDR8 0x3b8
+#define CSR_PMPADDR9 0x3b9
+#define CSR_PMPADDR10 0x3ba
+#define CSR_PMPADDR11 0x3bb
+#define CSR_PMPADDR12 0x3bc
+#define CSR_PMPADDR13 0x3bd
+#define CSR_PMPADDR14 0x3be
+#define CSR_PMPADDR15 0x3bf
+#define CSR_PMPADDR16 0x3c0
+#define CSR_PMPADDR17 0x3c1
+#define CSR_PMPADDR18 0x3c2
+#define CSR_PMPADDR19 0x3c3
+#define CSR_PMPADDR20 0x3c4
+#define CSR_PMPADDR21 0x3c5
+#define CSR_PMPADDR22 0x3c6
+#define CSR_PMPADDR23 0x3c7
+#define CSR_PMPADDR24 0x3c8
+#define CSR_PMPADDR25 0x3c9
+#define CSR_PMPADDR26 0x3ca
+#define CSR_PMPADDR27 0x3cb
+#define CSR_PMPADDR28 0x3cc
+#define CSR_PMPADDR29 0x3cd
+#define CSR_PMPADDR30 0x3ce
+#define CSR_PMPADDR31 0x3cf
+#define CSR_PMPADDR32 0x3d0
+#define CSR_PMPADDR33 0x3d1
+#define CSR_PMPADDR34 0x3d2
+#define CSR_PMPADDR35 0x3d3
+#define CSR_PMPADDR36 0x3d4
+#define CSR_PMPADDR37 0x3d5
+#define CSR_PMPADDR38 0x3d6
+#define CSR_PMPADDR39 0x3d7
+#define CSR_PMPADDR40 0x3d8
+#define CSR_PMPADDR41 0x3d9
+#define CSR_PMPADDR42 0x3da
+#define CSR_PMPADDR43 0x3db
+#define CSR_PMPADDR44 0x3dc
+#define CSR_PMPADDR45 0x3dd
+#define CSR_PMPADDR46 0x3de
+#define CSR_PMPADDR47 0x3df
+#define CSR_PMPADDR48 0x3e0
+#define CSR_PMPADDR49 0x3e1
+#define CSR_PMPADDR50 0x3e2
+#define CSR_PMPADDR51 0x3e3
+#define CSR_PMPADDR52 0x3e4
+#define CSR_PMPADDR53 0x3e5
+#define CSR_PMPADDR54 0x3e6
+#define CSR_PMPADDR55 0x3e7
+#define CSR_PMPADDR56 0x3e8
+#define CSR_PMPADDR57 0x3e9
+#define CSR_PMPADDR58 0x3ea
+#define CSR_PMPADDR59 0x3eb
+#define CSR_PMPADDR60 0x3ec
+#define CSR_PMPADDR61 0x3ed
+#define CSR_PMPADDR62 0x3ee
+#define CSR_PMPADDR63 0x3ef
+
+/* Machine Counters/Timers */
+#define CSR_MCYCLE 0xb00
+#define CSR_MINSTRET 0xb02
+#define CSR_MHPMCOUNTER3 0xb03
+#define CSR_MHPMCOUNTER4 0xb04
+#define CSR_MHPMCOUNTER5 0xb05
+#define CSR_MHPMCOUNTER6 0xb06
+#define CSR_MHPMCOUNTER7 0xb07
+#define CSR_MHPMCOUNTER8 0xb08
+#define CSR_MHPMCOUNTER9 0xb09
+#define CSR_MHPMCOUNTER10 0xb0a
+#define CSR_MHPMCOUNTER11 0xb0b
+#define CSR_MHPMCOUNTER12 0xb0c
+#define CSR_MHPMCOUNTER13 0xb0d
+#define CSR_MHPMCOUNTER14 0xb0e
+#define CSR_MHPMCOUNTER15 0xb0f
+#define CSR_MHPMCOUNTER16 0xb10
+#define CSR_MHPMCOUNTER17 0xb11
+#define CSR_MHPMCOUNTER18 0xb12
+#define CSR_MHPMCOUNTER19 0xb13
+#define CSR_MHPMCOUNTER20 0xb14
+#define CSR_MHPMCOUNTER21 0xb15
+#define CSR_MHPMCOUNTER22 0xb16
+#define CSR_MHPMCOUNTER23 0xb17
+#define CSR_MHPMCOUNTER24 0xb18
+#define CSR_MHPMCOUNTER25 0xb19
+#define CSR_MHPMCOUNTER26 0xb1a
+#define CSR_MHPMCOUNTER27 0xb1b
+#define CSR_MHPMCOUNTER28 0xb1c
+#define CSR_MHPMCOUNTER29 0xb1d
+#define CSR_MHPMCOUNTER30 0xb1e
+#define CSR_MHPMCOUNTER31 0xb1f
+#define CSR_MCYCLEH 0xb80
+#define CSR_MINSTRETH 0xb82
+#define CSR_MHPMCOUNTER3H 0xb83
+#define CSR_MHPMCOUNTER4H 0xb84
+#define CSR_MHPMCOUNTER5H 0xb85
+#define CSR_MHPMCOUNTER6H 0xb86
+#define CSR_MHPMCOUNTER7H 0xb87
+#define CSR_MHPMCOUNTER8H 0xb88
+#define CSR_MHPMCOUNTER9H 0xb89
+#define CSR_MHPMCOUNTER10H 0xb8a
+#define CSR_MHPMCOUNTER11H 0xb8b
+#define CSR_MHPMCOUNTER12H 0xb8c
+#define CSR_MHPMCOUNTER13H 0xb8d
+#define CSR_MHPMCOUNTER14H 0xb8e
+#define CSR_MHPMCOUNTER15H 0xb8f
+#define CSR_MHPMCOUNTER16H 0xb90
+#define CSR_MHPMCOUNTER17H 0xb91
+#define CSR_MHPMCOUNTER18H 0xb92
+#define CSR_MHPMCOUNTER19H 0xb93
+#define CSR_MHPMCOUNTER20H 0xb94
+#define CSR_MHPMCOUNTER21H 0xb95
+#define CSR_MHPMCOUNTER22H 0xb96
+#define CSR_MHPMCOUNTER23H 0xb97
+#define CSR_MHPMCOUNTER24H 0xb98
+#define CSR_MHPMCOUNTER25H 0xb99
+#define CSR_MHPMCOUNTER26H 0xb9a
+#define CSR_MHPMCOUNTER27H 0xb9b
+#define CSR_MHPMCOUNTER28H 0xb9c
+#define CSR_MHPMCOUNTER29H 0xb9d
+#define CSR_MHPMCOUNTER30H 0xb9e
+#define CSR_MHPMCOUNTER31H 0xb9f
+
+/* Machine Counter Setup */
+#define CSR_MCOUNTINHIBIT 0x320
+#define CSR_MCYCLECFG 0x321
+#define CSR_MINSTRETCFG 0x322
+#define CSR_MHPMEVENT3 0x323
+#define CSR_MHPMEVENT4 0x324
+#define CSR_MHPMEVENT5 0x325
+#define CSR_MHPMEVENT6 0x326
+#define CSR_MHPMEVENT7 0x327
+#define CSR_MHPMEVENT8 0x328
+#define CSR_MHPMEVENT9 0x329
+#define CSR_MHPMEVENT10 0x32a
+#define CSR_MHPMEVENT11 0x32b
+#define CSR_MHPMEVENT12 0x32c
+#define CSR_MHPMEVENT13 0x32d
+#define CSR_MHPMEVENT14 0x32e
+#define CSR_MHPMEVENT15 0x32f
+#define CSR_MHPMEVENT16 0x330
+#define CSR_MHPMEVENT17 0x331
+#define CSR_MHPMEVENT18 0x332
+#define CSR_MHPMEVENT19 0x333
+#define CSR_MHPMEVENT20 0x334
+#define CSR_MHPMEVENT21 0x335
+#define CSR_MHPMEVENT22 0x336
+#define CSR_MHPMEVENT23 0x337
+#define CSR_MHPMEVENT24 0x338
+#define CSR_MHPMEVENT25 0x339
+#define CSR_MHPMEVENT26 0x33a
+#define CSR_MHPMEVENT27 0x33b
+#define CSR_MHPMEVENT28 0x33c
+#define CSR_MHPMEVENT29 0x33d
+#define CSR_MHPMEVENT30 0x33e
+#define CSR_MHPMEVENT31 0x33f
+
+/* For RV32 */
+#define CSR_MCYCLECFGH 0x721
+#define CSR_MINSTRETCFGH 0x722
+#define CSR_MHPMEVENT3H 0x723
+#define CSR_MHPMEVENT4H 0x724
+#define CSR_MHPMEVENT5H 0x725
+#define CSR_MHPMEVENT6H 0x726
+#define CSR_MHPMEVENT7H 0x727
+#define CSR_MHPMEVENT8H 0x728
+#define CSR_MHPMEVENT9H 0x729
+#define CSR_MHPMEVENT10H 0x72a
+#define CSR_MHPMEVENT11H 0x72b
+#define CSR_MHPMEVENT12H 0x72c
+#define CSR_MHPMEVENT13H 0x72d
+#define CSR_MHPMEVENT14H 0x72e
+#define CSR_MHPMEVENT15H 0x72f
+#define CSR_MHPMEVENT16H 0x730
+#define CSR_MHPMEVENT17H 0x731
+#define CSR_MHPMEVENT18H 0x732
+#define CSR_MHPMEVENT19H 0x733
+#define CSR_MHPMEVENT20H 0x734
+#define CSR_MHPMEVENT21H 0x735
+#define CSR_MHPMEVENT22H 0x736
+#define CSR_MHPMEVENT23H 0x737
+#define CSR_MHPMEVENT24H 0x738
+#define CSR_MHPMEVENT25H 0x739
+#define CSR_MHPMEVENT26H 0x73a
+#define CSR_MHPMEVENT27H 0x73b
+#define CSR_MHPMEVENT28H 0x73c
+#define CSR_MHPMEVENT29H 0x73d
+#define CSR_MHPMEVENT30H 0x73e
+#define CSR_MHPMEVENT31H 0x73f
+
+/* Machine Security Configuration CSR (mseccfg) */
+#define CSR_MSECCFG 0x747
+#define CSR_MSECCFGH 0x757
+
+/* Debug/Trace Registers */
+#define CSR_TSELECT 0x7a0
+#define CSR_TDATA1 0x7a1
+#define CSR_TDATA2 0x7a2
+#define CSR_TDATA3 0x7a3
+#define CSR_TINFO 0x7a4
+#define CSR_TCONTROL 0x7a5
+#define CSR_MCONTEXT 0x7a8
+
+/* Debug Mode Registers */
+#define CSR_DCSR 0x7b0
+#define CSR_DPC 0x7b1
+#define CSR_DSCRATCH0 0x7b2
+#define CSR_DSCRATCH1 0x7b3
+
+/* Machine-Level Window to Indirectly Accessed Registers */
+#define CSR_MISELECT 0x350
+#define CSR_MIREG 0x351
+#define CSR_MIREG2 0x352
+#define CSR_MIREG3 0x353
+#define CSR_MIREG4 0x355
+#define CSR_MIREG5 0x356
+#define CSR_MIREG6 0x357
+
+/* Machine-Level Interrupts (AIA) */
+#define CSR_MTOPEI 0x35c
+#define CSR_MTOPI 0xfb0
+
+/* Virtual Interrupts for Supervisor Level (AIA) */
+#define CSR_MVIEN 0x308
+#define CSR_MVIP 0x309
+
+/* Smstateen extension registers */
+/* Machine stateen CSRs */
+#define CSR_MSTATEEN0 0x30C
+#define CSR_MSTATEEN0H 0x31C
+#define CSR_MSTATEEN1 0x30D
+#define CSR_MSTATEEN1H 0x31D
+#define CSR_MSTATEEN2 0x30E
+#define CSR_MSTATEEN2H 0x31E
+#define CSR_MSTATEEN3 0x30F
+#define CSR_MSTATEEN3H 0x31F
+
+/* Machine-Level High-Half CSRs (AIA) */
+#define CSR_MIDELEGH 0x313
+#define CSR_MIEH 0x314
+#define CSR_MVIENH 0x318
+#define CSR_MVIPH 0x319
+#define CSR_MIPH 0x354
+
+/* XuanTie custom */
+/* Machine-Level XuanTie custom CSRs */
+#define CSR_MXSTATUS 0x7c0
+#define CSR_MHCR 0x7c1
+#define CSR_MCOR 0x7c2
+#define CSR_MCCR2 0x7c3
+#define CSR_MCER2 0x7c4
+#define CSR_MHINT 0x7c5
+#define CSR_MRMR 0x7c6
+#define CSR_MRVBR 0x7c7
+#define CSR_MCER 0x7c8
+#define CSR_MCOUNTERWEN 0x7c9
+#define CSR_MHINT2 0x7cc
+#define CSR_MHINT3 0x7cd
+#define CSR_MHINT4 0x7ce
+#define CSR_MHPMEVENT0 0x7e0
+#define CSR_MHPMEVENT2 0x7e1
+#define CSR_MHPMCR 0x7f0
+#define CSR_MHPMSR 0x7f1
+#define CSR_MHPMER 0x7f2
+#define CSR_MSMPR 0x7f3
+#define CSR_MZONEID 0x7f5
+#define CSR_MLLCPID 0x7f6
+#define CSR_MLLWP 0x7f7
+
+#define CSR_MCINS 0x7d2
+#define CSR_MCINDEX 0x7d3
+#define CSR_MCDATA0 0x7d4
+#define CSR_MCDATA1 0x7d5
+#define CSR_MEICR 0x7d6
+#define CSR_MEICR2 0x7d7
+#define CSR_MBEADDR 0x7d8
+
+#define CSR_MCPUID 0xfc0
+#define CSR_MAPBADDR 0xfc1
+
+#define CSR_MHALTCAUSE 0xfe0
+#define CSR_MDBGINFO 0xfe1
+#define CSR_MPCFIFO 0xfe2
+#define CSR_MDBGINFO2 0xfe3
+
+#define CSR_MNASTATUS 0x8000000000000210
+
+#define CSR_MRPLCNTLST 0xbd8
+#define CSR_MCACHELOCK 0xbd9
+#define CSR_MCACHERPLPRI0 0xbda
+#define CSR_MCACHERPLPRI1 0xbdb
+#define CSR_MCACHERPLPRI2 0xbdc
+#define CSR_MCACHERPLPRI3 0xbdd
+#define CSR_MCACHERPLPRI4 0xbde
+#define CSR_MCACHERPLPRI5 0xbdf
+
+/* Supervisor-Level XuanTie custom CSRs */
+#define CSR_SXSTATUS 0x5c0
+#define CSR_SHCR 0x5c1
+#define CSR_SCER2 0x5c2
+#define CSR_SCER 0x5c3
+#define CSR_SHINT 0x5c6
+#define CSR_SHINT2 0x5c7
+#define CSR_SHPMINHIBIT 0x5c8
+#define CSR_SHPMCR 0x5c9
+#define CSR_SHPMSR 0x5ca
+#define CSR_SHPMER 0x5cb
+#define CSR_SL2PID 0x5cc
+#define CSR_SL2WP 0x5cd
+#define CSR_SBEADDR 0x5d0
+#define CSR_SSBEPA 0x5d1
+#define CSR_SSBEPA2 0x5d2
+#define CSR_SCYCLE 0x5e0
+#define CSR_SINSTRET 0x5e2
+#define CSR_SHPMCOUNTER3 0x5e3
+#define CSR_SHPMCOUNTER4 0x5e4
+#define CSR_SHPMCOUNTER5 0x5e5
+#define CSR_SHPMCOUNTER6 0x5e6
+#define CSR_SHPMCOUNTER7 0x5e7
+#define CSR_SHPMCOUNTER8 0x5e8
+#define CSR_SHPMCOUNTER9 0x5e9
+#define CSR_SHPMCOUNTER10 0x5ea
+#define CSR_SHPMCOUNTER11 0x5eb
+#define CSR_SHPMCOUNTER12 0x5ec
+#define CSR_SHPMCOUNTER13 0x5ed
+#define CSR_SHPMCOUNTER14 0x5ee
+#define CSR_SHPMCOUNTER15 0x5ef
+#define CSR_SHPMCOUNTER16 0x5f0
+#define CSR_SHPMCOUNTER17 0x5f1
+#define CSR_SHPMCOUNTER18 0x5f2
+#define CSR_SHPMCOUNTER19 0x5f3
+#define CSR_SHPMCOUNTER20 0x5f4
+#define CSR_SHPMCOUNTER21 0x5f5
+#define CSR_SHPMCOUNTER22 0x5f6
+#define CSR_SHPMCOUNTER23 0x5f7
+#define CSR_SHPMCOUNTER24 0x5f8
+#define CSR_SHPMCOUNTER25 0x5f9
+#define CSR_SHPMCOUNTER26 0x5fa
+#define CSR_SHPMCOUNTER27 0x5fb
+#define CSR_SHPMCOUNTER28 0x5fc
+#define CSR_SHPMCOUNTER29 0x5fd
+#define CSR_SHPMCOUNTER30 0x5fe
+#define CSR_SHPMCOUNTER31 0x5ff
+#define CSR_SCYCLEH 0x9e0
+#define CSR_SINSTRETH 0x9e2
+#define CSR_SHPMCOUNTER3H 0x9e3
+#define CSR_SHPMCOUNTER4H 0x9e4
+#define CSR_SHPMCOUNTER5H 0x9e5
+#define CSR_SHPMCOUNTER6H 0x9e6
+#define CSR_SHPMCOUNTER7H 0x9e7
+#define CSR_SHPMCOUNTER8H 0x9e8
+#define CSR_SHPMCOUNTER9H 0x9e9
+#define CSR_SHPMCOUNTER10H 0x9ea
+#define CSR_SHPMCOUNTER11H 0x9eb
+#define CSR_SHPMCOUNTER12H 0x9ec
+#define CSR_SHPMCOUNTER13H 0x9ed
+#define CSR_SHPMCOUNTER14H 0x9ee
+#define CSR_SHPMCOUNTER15H 0x9ef
+#define CSR_SHPMCOUNTER16H 0x9f0
+#define CSR_SHPMCOUNTER17H 0x9f1
+#define CSR_SHPMCOUNTER18H 0x9f2
+#define CSR_SHPMCOUNTER19H 0x9f3
+#define CSR_SHPMCOUNTER20H 0x9f4
+#define CSR_SHPMCOUNTER21H 0x9f5
+#define CSR_SHPMCOUNTER22H 0x9f6
+#define CSR_SHPMCOUNTER23H 0x9f7
+#define CSR_SHPMCOUNTER24H 0x9f8
+#define CSR_SHPMCOUNTER25H 0x9f9
+#define CSR_SHPMCOUNTER26H 0x9fa
+#define CSR_SHPMCOUNTER27H 0x9fb
+#define CSR_SHPMCOUNTER28H 0x9fc
+#define CSR_SHPMCOUNTER29H 0x9fd
+#define CSR_SHPMCOUNTER30H 0x9fe
+#define CSR_SHPMCOUNTER31H 0x9ff
+
+#define CSR_SRPLCNTLST 0x9d8
+#define CSR_SCACHELOCK 0x9d9
+#define CSR_SCACHERPLPRI0 0x9da
+#define CSR_SCACHERPLPRI1 0x9db
+#define CSR_SCACHERPLPRI2 0x9dc
+#define CSR_SCACHERPLPRI3 0x9dd
+#define CSR_SCACHERPLPRI4 0x9de
+#define CSR_SCACHERPLPRI5 0x9df
+
+/* User-Level XuanTie custom CSRs */
+#define CSR_TWCOUNTER 0x804
+#define CSR_FXCR 0x800
+#define CSR_XMRSTART 0x801
+#define CSR_XMCSR 0x802
+#define CSR_XMSIZE 0x803
+#define CSR_XMLENB 0xcc0
+#define CSR_XRLENB 0xcc1
+#define CSR_XMISA 0xcc2
+
+#define CSR_URPLCNTLST 0x8e8
+#define CSR_UCACHELOCK 0x8e9
+#define CSR_UCACHERPLPRI0 0x8ea
+#define CSR_UCACHERPLPRI1 0x8eb
+#define CSR_UCACHERPLPRI2 0x8ec
+#define CSR_UCACHERPLPRI3 0x8ed
+#define CSR_UCACHERPLPRI4 0x8ee
+#define CSR_UCACHERPLPRI5 0x8ef
+
+#endif /* __CSI_RV_ENCODING_H__ */
diff --git a/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/csi_core.h b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/csi_core.h
new file mode 100644
index 000000000..bbb859ff9
--- /dev/null
+++ b/ports/risc-v32/gnu/example_build/xuantie_smartl_fpga/components/csi/csi2/include/csi_core.h
@@ -0,0 +1,224 @@
+ /*
+ * Copyright (C) 2017-2024 Alibaba Group Holding Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/******************************************************************************
+ * @file csi_core.h
+ * @brief CSI Core Layer Header File
+ * @version V1.0
+ * @date 02. June 2017
+ ******************************************************************************/
+
+#ifndef _CORE_H_
+#define _CORE_H_
+
+#include
+
+#if defined(__csky__)
+
+#if defined(__CK801__) || defined(__E801__)
+#include
+#elif defined(__CK802__) || defined(__E802__) || defined(__E802T__) || defined(__S802__) || defined(__S802T__)
+#include
+#elif defined(__CK804__) || defined(__E804D__) || defined(__E804DT__) || defined(__E804F__) || defined(__E804FT__) || defined (__E804DF__) || defined(__E804DFT__)
+#include
+#elif defined(__CK803__) || defined(__E803__) || defined(__E803T__) || defined(__S803__) || defined(__S803T__)
+#include
+#elif defined(__CK805__) || defined(__I805__) || defined(__I805F__)
+#include